函数名和函数指针
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.
函数名是不是像数组一样代表了指向这个函数的指针?
如果我声明一个函数如下 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.