C陷阱与缺陷--读书笔记2 语法“陷阱”

第二章
 
一、知识点
1、函数运算符()的优先级高于单目运算符*。(P26)
 
2、我们一旦知道了如何声明一个变量,也就自然知道如何对一个常数进行类型转换,将其转型为该变量的类型:只要在变量声明中将变量名去掉即可。(P27)
例如:fp是一个指向返回值为void类型的函数的指针,那么(*fp)()的值为void,fp的声明为:void (*fp)();
将常数0转型为“指向返回值为void的函数的指针”类型,可以这样写:(void (*)()) 0
 
3、关于操作符优先级:(P30)
(1)、优先级最高者并不是真正意义上的运算符,包括:数组下标、函数调用操作符、各结构成员选择操作符。它们都是自左向右结合;
(2)、单目运算符的优先级仅次于前述运算符。单目运算符都是自右至左结合。
(3)、接下来就是双目操作符。双目操作符中,算术运算符的优先级最高,移位运算符次之,关系运算符再次之,接着就是逻辑运算符,最后是条件运算符。赋值运算符优先级低于条件运算符,它是自右向左结合性。除条件运算符都是自左向右结合性。
最重要的两点是:
(1)、任何一个逻辑运算符的优先级低于任何一个关系运算符;
(2)、移位运算符的优先级比算术运算符要低,但是比关系运算符要高。
 
4、关系运算符的优先级并不相同,运算符 == 和 !=的优先级要低于其他关系运算符的优先级。(P31)
任何两个逻辑运算符都具有不同的优先级。所有的按位运算符优先级要比顺序运算符的优先级高,每个“与”运算符要比相应的“或”运算符优先级高,而按位异或运算符(^)的优先级介于按位与和按位或运算符之间。
 
5、对于main函数,如果前面什么返回值类型都没写,则会缺省定义为int类型。(P35)
 
6、C语言要求:在函数调用时即使函数不带参数,也应该包括参数列表。因此,如果f是一个函数,
f();
是一个函数调用语句,而
f;
却是一个什么都不做的语句。准确地说,这个语句计算函数f的地址,却并不调用该函数。(P37)
 
7、在C 语言中,else始终与同一对括号内最近的未匹配的if结合。(P38)
 
二、问题
1、理解函数声明?
posted on 2012-05-01 09:18  谷堆旁边  阅读(283)  评论(0编辑  收藏  举报