1 关键字
1.1 sizeof
sizeof是关键字,不是函数
1.2 static
static两个作用:限制作用域(本文件),延长生命周期
- 静态全局变量:作用域仅限于变量被定义的文件中,其他文件即使用extern声明也没法使用他。
- 静态局部变量:由于被static修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值
静态函数:作用域仅限于本文件
1.3 基本数据类型
float 4byte, double 8byte
1.4 变量命名规则
- 所有宏定义、枚举常数、只读变量全用大写字母命名,用下划线分割单词
- 定义变量的同时千万千万别忘了初始化。定义变量时编译器并不一定清空了这块内存,它的值可能是无效的数据
1.5 signed
编译器缺省默认情况下数据为 signed 类型
1.6 switch case
case后面只能是整型或字符型的常量或常量表达式(想想字符型数据在内存里是怎么存的)
1.7 if else
在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。
1.8 void
void*
指针,任何类型的指针都可以直接赋值给它,无需进行强制类型转换,“空类型”包含“有类型”
1.9 const
- const修饰的只读变量必须在定义的同时初始化
- 先忽略类型名(编译器解析的时候也是忽略类型名),我们看const离哪个近。“近水楼台先得月”,离谁近就修饰谁。
const int *p;
// const 修饰*p
, p是指针,*p
是指针指向的对象,不可变
int const *p;
//const 修饰*p
,p 是指针,*p
是指针指向的对象,不可变
int *const p;
/const 修饰 p, p 不可变, p 指向的对象可变
const int *const p;
//前一个 const 修饰“, 后一个 const 修饰 p,指针 p 和 p 指向的对象都不可变
1.10 union
在 union中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址
2 符号
- 逻辑运算符||的条件只要有一个为真,其结果就为真;只要有一个结果为假,其结果就为假
- 左移和右移:当为正数时, 最高位补 0;而为负数时,符号位为 1,最高位是补 0 或是补 1 取决于编译系统的规定。 Tu rbo C 和很多系统规定为补 1
- 左移和右移的位数不能大于数据长度,不能小于0
- “ +”号的优先级比移位运算符的优先级高
2.1 运算优先级
1 []
高于*
,比如int *a[];
2 函数()
高于*
,比如 int *fp();
3 ==和!=高于位运算,比如val & mask != 0;
4 ==和!=高于赋值运算符,比如c = getchar() != EOF
5 算术运算符高于赋值运算符,比如 msb << 4 + lsb
3 预处理
另外 ANS I 标准 C 还定义了如下几个宏:
_LINE_
表示正在编译的文件的行号
_FILE_
表示正在编译的文件的名字
_DATE_
表示编译时刻的日期字符串,例如: “25 Dec 2007