函数名和函数指针

Function Name and Pointer to function

函数名是不是像数组一样代表了指向这个函数的指针?

如果我声明一个函数如下 void fu (void); 和一个指向函数的指针数组 void(*ptr_fn[8])(void); 那么我可以这样做吗 ptr_fn[0] = fu;

是的。也相当于:

ptr_fn[0] = &fu ;

& 是可选的。

同样通过指针调用函数

ptr_fn[0]() ;

相当于:

(*ptr_fn[0])() ;

使用 &* 运算符可能是为了强调您正在处理一个函数指针,因此有助于人类的维护和理解,但对编译器的代码生成。

不是,数组名也不代表指针。

名称表示函数,但在表达式中使用函数名称时存在隐式转换。

参见 4.3 函数到指针的转换:

An lvalue of function type T can be converted to a prvalue of type “pointer to T.” The result is a pointer to the function.