我有两个问题
1.我看到了
int (*Ptr)(int,int);
Ptr=someOtherFuncion;
不应该那样吗?
Ptr=&someOtherFuncion;
2.我学习了函数指针,用于回调 像那样
someOtherFunction(functionPointer)
如果我将一个不是指针的常规函数放在什么区别?
答案 0 :(得分:7)
函数的名称几乎立即衰减到指向函数的指针,因此someOtherFunction
衰减到&someOtherFunction
明确给出的同一指针。实际上,address-of运算符(&
)的操作数是衰变不发生
这会产生一些有趣的后果:即使您取消引用函数指针,它也会立即再次衰减。所以以下都是等价的:
someOtherFunction(1, 2);
(*someOtherFunction)(1, 2);
(**someOtherFunction)(1, 2);
(***someOtherFunction)(1, 2);
所以,如果你感觉不适合没有显式地址的函数指针,那么将&
放在那里,但你不必这样做。
解决问题的第二部分:函数始终通过函数指针调用,但由于上述瞬时衰减,正常函数可以像函数一样被调用指针。