p = add;
注意,这里不需要加括号,否则会被解释为调用函数并将返回值赋给p。
3. 函数指针的调用
函数指针的调用需要在其后加上括号,并传入相应的参数。一般形式如下:
(* 指针名)(参数列表);
例如,调用p所指向的add函数,并传入两个整数:
int result = (* p)(3, 5);
注意,这里也不能省略括号,否则会被解释为取出p所存储的地址作为返回值。
4. 函数指针的传参
函数指针也可以作为参数传递给其他函数,实现回调机制。这时需要在定义或声明接收函数时,使用与传入函数相同的类型和格式。一般形式如下:
`返回类型 接收函数名(参数列表, 返回类型 (* 指针名)(参数类型列表));`
例如,定义一个比较两个整数大小的函数:
int compare(int a, int b) {
if (a > b) return 1;
else if (a < b) return -1;
else return 0;
}
然后定义一个接收比较函数作为参数,并根据比较结果输出不同信息的函数:
void print_result(int a, int b, int (* cmp)(int, int)) {
int result = (* cmp)(a, b);
if (result > 0) printf("%d is greater than %d\n", a, b);
else if (result < 0) printf("%d is less than %d\n", a, b);
else printf("%d is equal to %d\n", a, b);
}
最后调用print_result函数,并传入compare作为参数:
print_result(3, 5, compare);
系列文章持续更新,如果觉得有帮助请点赞+关注!