函数的名称是否像数组一样代表了这个函数的指针?
如果我声明一个函数如下void fu (void);
和一个指向函数的指针数组void(*ptr_fn[8])(void);
那么我可以这样做ptr_fn[0] = fu;
答案 0 :(得分:3)
不,数组的名称也不代表指针。
名称代表函数,但在表达式中使用函数名时会有隐式转换。
参见4.3函数到指针的转换:
函数类型T的左值可以转换为类型的prvalue “指向T的指针。”结果是指向函数的指针。
答案 1 :(得分:2)
是。它也相当于:
ptr_fn[0] = &fu ;
即。 &
是可选的。
同样通过指针
调用函数时ptr_fn[0]() ;
相当于:
(*ptr_fn[0])() ;
使用&
和*
运算符可能会强调您正在处理函数指针,因此有助于人类的维护和理解,但对编译器的代码没有影响代。