正确的方法来传递函数指针和它们之间的区别

时间:2015-06-02 01:43:45

标签: c callback function-pointers

阅读函数指针,提出了一个问题,我在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种不同的组合方式。

谢谢!

1 个答案:

答案 0 :(得分:2)

在形式上,两者都是正确的,在实践中你可能会看到使用过。

我个人会用:

handle(1, 2, sum);

printf("\nResult: %d.\n\n", func(a, b));

因为我不认为无关的运算符会添加任何值。