指向函数语法和用法的指针

时间:2012-12-18 15:49:13

标签: objective-c c

如果多次被问到,我道歉。 我试图理解为什么这两个都没有任何警告或其他可见问题(在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);
}

1 个答案:

答案 0 :(得分:5)

代码工作正常,没有任何警告,因为函数指示符被转换为函数指针

MyPointerToFunction functionPointer = testFunctionAcceptingIntPointer;

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

MyPointerToFunction functionPointer = &testFunctionAcceptingIntPointer;

(或sizeof_Alignof)。

在第一个赋值中,你不使用&,所以自动转换完成,产生一个合适类型的函数指针,在第二个,你明确地取地址,产生一个函数指针适当的类型。