【问题标题】:What's the difference between fun(...) and (*fun)(...) using a function pointer in C/C++ [duplicate]在 C/C++ 中使用函数指针的 fun(...) 和 (*fun)(...) 有什么区别 [重复]
【发布时间】:2011-12-21 16:36:19
【问题描述】:

可能重复:
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)();

有什么区别/

【问题讨论】:

    标签: c++ c function-pointers


    【解决方案1】:

    正好是两个括号和一个星号。

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

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

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

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

    【讨论】:

    • 还要注意(fun)()(**fun)()也是合法的等价物。
    • +1 表示第一行。这几乎正​​是我要给出的答案,只是我想我会说“一个很丑,另一个不是”。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    相关资源
    最近更新 更多