C语言语法“陷阱”——函数声明
来源:互联网 发布:流程优化的方法和应用 编辑:程序博客网 时间:2024/05/22 06:08
说明
整理自《C陷阱与缺陷》(C Traps and Pitfalls) 第2章
学习笔记——根据本人理解,加以表述,并非完全摘抄。
1、区分
float *g(), (*h)();
注解:
很明显()的优先级高于 *,所以*g()相当于*( g() ),这样就很明确了,g是一个函数,其返回值是float *型的值,即指向浮点数的指针。
而h是一个函数指针,根据其定义,该指针可用于指向返回值为浮点类型的函数。
2、类型转换符
float (*h)();
想要获得该类型的类型转换符,只要把声明中的变量名和声明末尾的分号去掉,再将整个剩余的部分加上括号。即:( float (*)() )
3、函数指针的简写问题
假设有一个返回值为int型的函数,定义一个函数指针指向该函数,并且调用该函数的方法:
int (*pf)() = &add;pf();
直接用指针变量加括号(可能有参数)即可调用指向的函数,但我们要知道这是简写形式,完整的调用方式应该是(*pf)()
,只是ANSI C标准允许这样简写,我们也基本都使用简写形式调用函数。
但是我们使用函数指针时一定要注意括号问题:*pf两边的括号千万不能遗漏。
如果遗漏了就变成*pf() —> *( pf() ) —> *( (*pf)() )
4、理解一个复杂的表达式
(*(void (*)())0)();
其中一部分应该很熟悉(void (*)())
,这就是刚刚讲到的类型转换符,可见这是讲常数0转换为“指向返回值为void类型的函数的指针”,即将0转换成了函数指针。
既然是个函数指针那我们就应该想到函数指针的使用,很容易联想到调用的非简写形式,即(*pf)()
,那么该表达式的结构就清楚了。
0 0
- C语言语法“陷阱”——函数声明
- 对c语言陷阱与缺陷中函数声明理解
- C语言声明语法
- c语言语法陷阱总结
- C陷阱与缺陷 —— 读书笔记-2、语法“陷阱”
- C语言复杂声明语法
- C陷阱与缺陷中的一个问题——signal函数声明的剖析
- C语言函数声明
- C语言函数声明
- C语言函数声明
- C语言--函数声明
- c 语言时间函数陷阱
- C语言难点专题——复杂的函数声明
- [C专家]分析C语言声明——只有编译器才会喜欢的语法
- C语言——声明
- 水滴石穿C语言之声明的语法
- 水滴石穿C语言之声明的语法
- 水滴石穿C语言之声明的语法
- 【Maven】使用入门
- ProcessMaker Installation—MySQL-MariaDB—Apache—PHP
- php test —CentOS7— 编译 PHP
- MySQL存储过程
- c++ 构造http post 发文件
- C语言语法“陷阱”——函数声明
- Spring的四大注释
- 安装processmaker —PHP—BPM
- 【英语】baby养成记——三月
- php配置文件php.ini所在路径
- JAVA和计算机原理
- linux命令笔记
- Linux下PHP5.6编译参数详解
- Centos7-64bit尝试编译最新版的nginx1.9.3+php7+mysql5.6.25