当使用“&”时函数指针中的运算符?

时间:2017-04-11 23:48:17

标签: c pointers function-pointers

在下面的代码中,我正在file.rec中阅读main并将其放入char buf。然后我传递了bufgetCallBack()函数的函数指针,但我以两种可用的方式传递函数。这个函数通常以这两种方式接收函数指针。所以我很想知道使用它与否有什么不同。

#include<stdio.h>

void getCallBack(char buf[], void(*executeCallBack)(char[])){
    printf("callback recived\n");
    executeCallBack(buf);
}

void callBack(char buf[]){
    printf("executing callback...\n");
    printf("buf content: ");
    printf("%s\n", buf);
}

void main() {

    FILE *ReadingXmlFile = fopen("texto.rec", "r");
    char buf[10000];
    fread(buf, 1, 10000, ReadingXmlFile);
    fclose(ReadingXmlFile);

    printf("passing \"&callBack\"\n");
    getCallBack(buf, &callBack);

    printf("passing \"callBack\"\n");
    getCallBack(buf, callBack);
    //
}

2 个答案:

答案 0 :(得分:4)

这是一个纯粹的化妆品问题。在函数类型本身衰减到指针类型(几乎无处不在)的上下文中,显式一元&没有语义差异。选择看起来更好的东西。努力保持一致。

在通过指针调用函数时,使用显式*运算符实际上同样适用。您可以调用executeCallBack(buf)(*executeCallBack)(buf)作为回调。两者是等价的。再次,选择你的风格并坚持下去。

有些人可能认为只是为了对称,如果在获取地址时使用&,则在调用函数时应使用*

答案 1 :(得分:3)

没有区别。隐含&

如果您有一个数组someArray,那么就可以使用someArray代替&someArray[0]