在下面的代码中,我正在file.rec
中阅读main
并将其放入char buf
。然后我传递了buf
和getCallBack()
函数的函数指针,但我以两种可用的方式传递函数。这个函数通常以这两种方式接收函数指针。所以我很想知道使用它与否有什么不同。
#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);
//
}
答案 0 :(得分:4)
这是一个纯粹的化妆品问题。在函数类型本身衰减到指针类型(几乎无处不在)的上下文中,显式一元&
没有语义差异。选择看起来更好的东西。努力保持一致。
在通过指针调用函数时,使用显式*
运算符实际上同样适用。您可以调用executeCallBack(buf)
或(*executeCallBack)(buf)
作为回调。两者是等价的。再次,选择你的风格并坚持下去。
有些人可能认为只是为了对称,如果在获取地址时使用&
,则在调用函数时应使用*
。
答案 1 :(得分:3)
没有区别。隐含&
。
如果您有一个数组someArray
,那么就可以使用someArray
代替&someArray[0]
。