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