### 函数指针
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;
}