可能重复:
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)();
有什么区别/
答案 0 :(得分:7)
准确地说是两个括号和一个星号。
两者都调用fun
指向的函数,两者都以相同的方式调用。
然而,在视觉上,(*fun)
清楚地表明fun
本身并不是一个函数,并且取消引用运算符是一个视觉提示,它是某种指针。
无括号语法fun()
与常规函数调用相同,因此在视觉上等同于此,使得主要清楚您正在调用某种函数。它需要上下文或查找来注意它是一个函数指针。
就发生的情况而言,这只是一种风格差异。