int testFunctionAcceptingIntPointer(int * p) {
return *p = *p +5;
}
void test() {
int testY = 7;
typedef int (*MyPointerToFunction)(int*);
// Both this (simply a function name):
MyPointerToFunction functionPointer = testFunctionAcceptingIntPointer;
// And this works (pointer to function):
MyPointerToFunction functionPointer = &testFunctionAcceptingIntPointer;
int y = functionPointer(&testY);
}
答案 0 :(得分:5)
代码工作正常,没有任何警告,因为函数指示符被转换为函数指针
MyPointerToFunction functionPointer = testFunctionAcceptingIntPointer;
除非它是地址运算符的操作数
MyPointerToFunction functionPointer = &testFunctionAcceptingIntPointer;
(或sizeof
和_Alignof
)。
在第一个赋值中,你不使用&
,所以自动转换完成,产生一个合适类型的函数指针,在第二个,你明确地取地址,产生一个函数指针适当的类型。