2

我有两个问题

1.我看到了

int (*Ptr)(int,int);
Ptr=someOtherFuncion;

它不应该是这样的吗?

Ptr=&someOtherFuncion;

2.我知道函数指针是这样的回调

    someOtherFunction(functionPointer)

如果我放置一个不是指针的常规函数​​有什么区别?

4

1 回答 1

7

函数的名称几乎立即衰减为指向该函数的指针,因此someOtherFunction衰减为&someOtherFunction显式提供给您的同一个指针。事实上,地址运算符 ( &) 的操作数是少数几个不会发生衰减的地方之一。

这会产生有趣的后果:即使您取消引用函数指针,它也会立即再次衰减。所以以下都是等价的:

someOtherFunction(1, 2);
(*someOtherFunction)(1, 2);
(**someOtherFunction)(1, 2);
(***someOtherFunction)(1, 2);

所以,如果你觉得分配给一个没有明确地址的函数指针感到不舒服,一定要把它&放在那里,但你不必这样做。

解决问题的第二部分:总是通过函数指针调用函数,但是由于上述即时衰减,普通函数可以像函数指针一样被调用。

于 2012-11-05T23:51:23.050 回答