阅读函数指针,提出了一个问题,我在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种不同的组合方式。
谢谢!
答案 0 :(得分:2)
在形式上,两者都是正确的,在实践中你可能会看到使用过。
我个人会用:
handle(1, 2, sum);
和
printf("\nResult: %d.\n\n", func(a, b));
因为我不认为无关的运算符会添加任何值。