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

What's the difference between fun(...) and (*fun)(...) using a function pointer in C/C++

本文关键字:fun 区别 什么 指针 C++ 函数      更新时间:2023-10-16

可能重复:
为什么在不取消引用的情况下调用指向函数的指针
函数指针的取消引用是如何发生的?

假设我有一个函数指针,如:

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

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

fp();

(*fp)();

区别是什么/

精确地用两个括号和一个星号。

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

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

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

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