关于c中函数指针的2个问题

时间:2012-11-05 23:45:43

标签: c function

我有两个问题

1.我看到了

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

不应该那样吗?

Ptr=&someOtherFuncion;

2.我学习了函数指针,用于回调 像那样

    someOtherFunction(functionPointer)

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

1 个答案:

答案 0 :(得分:7)

函数的名称几乎立即衰减到指向函数的指针,因此someOtherFunction衰减到&someOtherFunction明确给出的同一指针。实际上,address-of运算符(&)的操作数是衰变不发生

的少数几个地方之一。

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

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

所以,如果你感觉不适合没有显式地址的函数指针,那么将&放在那里,但你不必这样做。

解决问题的第二部分:函数始终通过函数指针调用,但由于上述瞬时衰减,正常函数可以像函数一样被调用指针。