【问题标题】:2 questions about function pointer in cc语言中关于函数指针的2个问题
【发布时间】:2012-11-05 23:45:42
【问题描述】:

我有两个问题

1.我看到了

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

不应该是这样的吗?

Ptr=&someOtherFuncion;

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

    someOtherFunction(functionPointer)

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

【问题讨论】:

标签: c function


【解决方案1】:

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

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

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

因此,如果您对分配给没有明确地址的函数指针感到不适,请务必将& 放在那里,但您不必这样做。

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

【讨论】:

  • 关于第二部分,如果常规函数就像函数指针,我为什么要使用函数指针?
  • @user1801625: 我从来没有声称你应该 :-) 但是假设你想要一个函数是可变的,比如回调、处理程序、线程入口点,或者在运行时链接的东西...
  • 所以常规函数不能是回调函数,如果它的变量有什么关系?为了方便起见吗?
  • 等等,慢点。想想使用回调的函数。如果您愿意,请查看qsort
猜你喜欢
  • 1970-01-01
  • 2021-07-14
  • 2021-10-29
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多