使用函数名称作为函数指针
C90 的基本原理文档深入了解了将函数名称与函数指针等同的设计选择。这种便利简化了在特定上下文中使用函数指针的过程。
函数声明
考虑声明:
int f(); int (*pf)();
函数调用
以下所有表示有效的函数调用:
(&f)(); f(); (*f)(); (**f)(); (***f)(); pf(); (*pf)(); (**pf)(); (***pf)();
每行的第一个表达式之前已介绍过。第二种是常规的。随后的表达式意味着在大多数上下文中将函数指示符隐式转换为指针值。
设计原理
委员会认为允许这些形式并查看没有明显的缺点将其视为过度努力而取缔。因此,函数指示符和函数指针之间的等价性为指针使用提供了便利。
隐式转换
另一个有趣的观察是使用时函数类型到指针的隐式转换作为参数但不作为返回类型:
typedef bool FunctionType(int); void g(FunctionType); // Implicitly converts to void g(FunctionType *) FunctionType h(); // Error FunctionType *j(); // Returns a function pointer with the type bool(int)的函数指针
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3