函数指针
函数指针是指向函数的指针变量。
通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。
函数指针可以像一般函数一样,用于调用函数、传递参数。
1 #include <stdio.h> 2 3 // 取两个数里最大的数字 4 int getMaxValue(int, int); 5 6 int main() { 7 // func就是涵数指针 8 int (*p)(int, int) = &getMaxValue; // &可省略 9 int a = 15, b = 7, c = 20, d; 10 d = p(c, p(a, b)); 11 printf("%d ", d); // 20 12 return 0; 13 } 14 15 int getMaxValue(int x, int y) { 16 return x >= y ? x : y; 17 }
回调涵数
函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。
简单讲:回调函数是由别人的函数执行时调用你实现的函数。
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 // 回调函数 5 void populateArray(int *arr, size_t size, int (*getNextValue)(void)); 6 // 获取随机值 7 int getNextRandomValue(); 8 9 int main() { 10 int arr[10], i; 11 populateArray(arr, 10, getNextRandomValue); 12 for (i = 0; i < 10; i++) { 13 printf("%d ", arr[i]); 14 } 15 printf(" "); 16 return 0; 17 } 18 // size_t 是一种数据类型,近似于无符号整型,但容量范围一般大于 int 和 unsigned 19 // int (*getNextValue)(void) = getNextRandomValue; (涵数指针) 20 void populateArray(int *arr, size_t size, int (*getNextValue)(void)) { 21 size_t i; 22 for (i = 0; i < size; i++) { 23 arr[i] = getNextValue(); 24 } 25 } 26 int getNextRandomValue() { 27 return rand(); 28 }