我有两个问题
1.我看到了
int (*Ptr)(int,int);
Ptr=someOtherFuncion;
它不应该是这样的吗?
Ptr=&someOtherFuncion;
2.我知道函数指针是这样的回调
someOtherFunction(functionPointer)
如果我放置一个不是指针的常规函数有什么区别?
函数的名称几乎立即衰减为指向该函数的指针,因此someOtherFunction
衰减为&someOtherFunction
显式提供给您的同一个指针。事实上,地址运算符 ( &
) 的操作数是少数几个不会发生衰减的地方之一。
这会产生有趣的后果:即使您取消引用函数指针,它也会立即再次衰减。所以以下都是等价的:
someOtherFunction(1, 2);
(*someOtherFunction)(1, 2);
(**someOtherFunction)(1, 2);
(***someOtherFunction)(1, 2);
所以,如果你觉得分配给一个没有明确地址的函数指针感到不舒服,一定要把它&
放在那里,但你不必这样做。
解决问题的第二部分:总是通过函数指针调用函数,但是由于上述即时衰减,普通函数可以像函数指针一样被调用。