第一章 词法陷阱
1.3词法分析中的“贪心法”
每一个符号应该包含尽可能多的字符,也就是说编译器把程序分解为符号的方法是,从左到右一个字符一个字符的读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分,如果可能重复上述判断,直到读入的字符组成的字符串已不再可能组成一个有意义的符号,这个策略被称为“贪心法”。
需要注意的是,除了字符串与字符常量,符号的中间不能嵌有空白(空白符、制表符和换行符)。例如,==是单个符号,而= =则是两个符号(注意其中的空格符)。
1.4整形变量
在整型数前使用0开头的是八进制表示方法,10与010的含义截然不同
x=010;实际上x为8;
1.5字符与字符串
- 用单引号包起来的一个字符实际上代表一个整数,整数值对应该字符在编译器中采用的字符集中的序列值。因此'a'的含义与97(十进制)严格一致
- 用双引号包起来的字符串,代表的是一个指向无名数组起始字符的指针。该指针被被双引号之间的字符以及一个额外的二进制值为0的字符'\0'初始化。
hello=”Hello\n“与hello[]={'H','e','l','l','o','\n','\0'}一致
整数型(16位或32位)一般可以容纳多个字符(8位)数值按编译器组合得到。
本书几个代表性的例子为
char *str='\n' 错误因为使用单引号包起来实际是个整数,不能赋给字符指针。
第二章 语法陷阱
2.1理解函数声明

这里要说一下函数指针和指针类型返回值,借用谭文波同学的例子:
float *g(),(*h)();
因为 ( ) 结合的优先级高于 * ,
第一个声明float *g()
也就是一个返回值类型为指向float值的指针的函数 ,
而第二个则是声明一个函数指针h,这个函数指针h所指向的函数的返回值类型为float
2.2运算符的优先级
结合性的记忆方法:
1、单目运算符中除了自加和自减这两种依赖于顺序的运算符外,其他的全部都是自右向左结合的
2、双目运算符都是自左向右结合的
3、三目运算符是自右向左结合的
4、赋值运算符是自右向左结合的