### 函數指針
C語言里函數也有地址。
函數名稱可以用來表示函數的地址。
#include <stdio.h>
int add(int num, int num1){
return num + num1;
}
int main(){
printf("add = %p\n", add); // 函數的地址
return 0;
}
函數指針可以用來記錄函數地址。
函數指針也需要先聲明然后才能使用。
函數指針聲明需要根據函數聲明變化得到。
函數指針也分類型,不同類型的函數指針適合與不同類型的函數捆綁。
函數指針可以用來調用函數。
#include <stdio.h>
int add(int num, int num1){
return num + num1;
}
int main(){
int (*p_add)(int, int) = NULL; // 函數指針聲明 + 初始化
p_add = add;
printf("add result = %d\n", p_add(10, 20));
return 0;
}
函數指針可以用來實現跨文件調用函數。
函數指針可以作為形式參數使用。
#include <stdio.h>
void print(int *p_num){
printf("%d", *p_num);
}
void for_each(int *p_num, int size, void (*p_func)(int *)){
int num = 0;
for (num = 0;num <= size - 1;num++){
p_func(p_num + num);
}
}
int main(){
int arr[] = {1, 2, 3, 4, 5};
for_each(arr, 5, print);
printf("\n");
return 0;
}
**回調函數**
會作為實際參數使用的函數叫做回調函數。
#include <stdio.h>
void print(int *p_num){
printf("num = %d\n", *p_num);
}
void anti(int *p_num){
*p_num = 0 - *p_num;
}
void for_each(int *p_num, int size, void (*p_func)(int *)){
int num = 0;
for (num = 0;num <= size - 1;num++){
p_func(p_num + num);
}
}
int main(){
int arr[] = {1, 2, 3, 4, 5};
for_each(arr, 5, anti);
for_each(arr, 5, print);
return 0;
}