您的位置:首页 > 编程语言 > C语言/C++

C陷阱与缺陷第二章 语法“陷阱”

2017-07-19 21:46 190 查看
1.理解函数声明

①float *g(); //g是一个函数,该函数的返回值类型为指向浮点数的指针

②float (*h)(); //h是一个函数指针,h所指向函数的返回值为浮点类型;

③声明一个给定类型的变量,要得到该类型的类型转换符:把声明中的变量名和声明末尾的分号去掉,再将剩余的部分用一个括号整个“封装”起来。因此 (float (*)()) 表示一个“指向返回值为浮点类型的函数指针 float (*h)()”的类型转换符。

④将常数0转型为“指向返回值为void的函数的指针”类型:(void (*)())0;

如果fp是一个指向返回值为void类型的函数的指针,(*fp)();

可以用(void ()())0 替换fp,得到:(*void()()0)();

2.运算符的优先级问题

①优先级最高者包括数组下标、函数调用操作符,具体有 ()、[]、->、. ;

②单目运算符(运算所需变量为一个)优先级为第二,是自右向左结合;具体有: !、~、++、-、(type)、*、&、sizeof;

③接下来是双目运算符(运算所需变量为两个),其中,算术运算符的优先级最高(*、/、%、+、-),移位运算符次之(<<、 >>),接着是关系运算符(< 、<= 、> 、>= 、== 、!=),最后是逻辑运算符(&、^、|、&&、||);

④三目条件运算符优先级再低(? :);

⑤赋值运算符的优先级再低,逗号运算符最低。

3.switch语句

C语言中把case标号当作真正意义上的标号,因此如果不加break,程序的控制流程会直径通过case标号,执行下一个case后的语句,不受任何影响。

4.“悬挂”else引发的问题

在C语言里,else始终与同一对话括号内最近的未匹配的if结合。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言