C基础知识(6):指针--函数指针与回调涵数

函数指针

函数指针是指向函数的指针变量

通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。

函数指针可以像一般函数一样,用于调用函数、传递参数。

 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\n", 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("\n");
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 }

 

posted @ 2017-11-06 15:51  Storm_L  阅读(352)  评论(0)    收藏  举报