0

如果这个问题被问了很多次,我很抱歉。我试图理解为什么这两个都可以正常工作而没有任何警告或其他可见问题(在 Xcode 中):

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);
}
4

1 回答 1

5

由于函数指示符被转换为函数指针,因此代码在没有警告的情况下都可以正常工作

MyPointerToFunction functionPointer = testFunctionAcceptingIntPointer;

除非它是地址运算符的操作数

MyPointerToFunction functionPointer = &testFunctionAcceptingIntPointer;

(或sizeof_Alignof)。

在第一次分配中,您不使用&,因此完成了自动转换,从而产生了适当类型的函数指针,在第二次中,您显式地获取了地址,从而产生了适当类型的函数指针。

于 2012-12-18T15:56:45.687 回答