<分区>
阅读有关函数指针的内容,出现了一个问题,我在 stackoverflow 上找到了一些答案,但我还是不明白。
那么,这些代码有什么区别呢? 编译器看到了什么? 是否有正确的方法或良好的编程习惯来执行此操作?
#include<stdio.h>
int sum(int a, int b);
void handle(int a, int b, int (*func)(int, int));
int main()
{
handle(1, 2, sum); /*Here the third argument can be sum or &sum*/
return 0;
}
void handle(int a, int b, int (*func)(int, int))
{
printf("\nResult: %d.\n\n", func(a, b)); /*Here the second argument can be func(a, b) or (*func)(a, b)*/
}
int sum(int a, int b)
{
return a + b;
}
我可以通过两种方式调用句柄:
handle(1, 2, sum);
handle(1, 2, &sum);
在句柄中,我可以通过两种方式调用 printf:
printf("\nResult: %d.\n\n", func(a, b));
printf("\nResult: %d.\n\n", (*func)(a, b));
所有这些方式都可以组合,所以我们有4种不同的组合方式。
谢谢!