功能名称和功能指针

时间:2015-12-15 12:48:30

标签: c++ c pointers embedded

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

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

2 个答案:

答案 0 :(得分:3)

不,数组的名称也不代表指针。

名称代表函数,但在表达式中使用函数名时会有隐式转换。

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

  

函数类型T的左值可以转换为类型的prvalue   “指向T的指针。”结果是指向函数的指针。

答案 1 :(得分:2)

是。它也相当于:

ptr_fn[0] = &fu ;

即。 &是可选的。

同样通过指针

调用函数时
ptr_fn[0]() ;

相当于:

(*ptr_fn[0])() ;

使用&*运算符可能会强调您正在处理函数指针,因此有助于人类的维护和理解,但对编译器的代码没有影响代。