在C / C ++中使用函数指针的fun(...)和(* fun)(...)之间的区别是什么

时间:2011-11-04 01:55:18

标签: c++ c function-pointers

  

可能重复:
  How come pointer to a function be called without dereferencing?
  How does dereferencing of a function pointer happen?

假设我有一个功能指针,如:

void fun() { /* ... */ };
typedef void (* func_t)();
func_t fp = fun;

然后我可以通过以下方式调用它:

fp();

(*fp)();

有什么区别/

1 个答案:

答案 0 :(得分:7)

准确地说是两个括号和一个星号。

两者都调用fun指向的函数,两者都以相同的方式调用。

然而,在视觉上,(*fun)清楚地表明fun本身并不是一个函数,并且取消引用运算符是一个视觉提示,它是某种指针。

无括号语法fun()与常规函数调用相同,因此在视觉上等同于此,使得主要清楚您正在调用某种函数。它需要上下文或查找来注意它是一个函数指针。

就发生的情况而言,这只是一种风格差异。