一、词法陷阱
1.int a=021;则a的值是多少? (021被编译器认为是八进制)
2.z=b/*p;与z=b/ *p的区别 (前者/*被看成一个标示符)
二、语法陷阱
1.运算符的优先级问题:(依次降低)
(1)数组下标、函数调用、操作各结构成员选择操作符(->和.) (结合方式:从左到右)
(2)单目操作符 (结合方式:从右到左)
(3)双目运算符 (算术>移位>关系>逻辑>赋值) (结合方式:从左到右)
(4)三目运算符(?:) (结合方式:从右到左)
2.函数的返回类型缺省定义为int类型
3.可以对数组名解引用吗?答:可以,*数组名可以取数组中元素
三、语义陷阱
1.空指针:用0或NULL定义空指针是等同的,因为库文件中有宏定义#define NULL 0
2.两个有符号的相加会溢出,而两个无符号的相加不会溢出
1.int a=021;则a的值是多少? (021被编译器认为是八进制)
2.z=b/*p;与z=b/ *p的区别 (前者/*被看成一个标示符)
二、语法陷阱
1.运算符的优先级问题:(依次降低)
(1)数组下标、函数调用、操作各结构成员选择操作符(->和.) (结合方式:从左到右)
(2)单目操作符 (结合方式:从右到左)
(3)双目运算符 (算术>移位>关系>逻辑>赋值) (结合方式:从左到右)
(4)三目运算符(?:) (结合方式:从右到左)
2.函数的返回类型缺省定义为int类型
3.可以对数组名解引用吗?答:可以,*数组名可以取数组中元素
三、语义陷阱
1.空指针:用0或NULL定义空指针是等同的,因为库文件中有宏定义#define NULL 0
2.两个有符号的相加会溢出,而两个无符号的相加不会溢出