一、基本数据类型
1.四种基本类型:整型、浮点型、指针和聚合类型(如数组和结构、枚举等)
2.长整数至少和整型一样长,而整型至少应该和短整型一样长;
3.缺省的char要么是unsigned,要么是signed char,表准规定这取决于编译器,像int等一般默认为是signed,但arm-linux-gcc编译器将char定为signed char。
4.对于char类型的可移植性问题,只有把char型字符变量的值限制在signed和unsigned的交集之内,才具有最大程度的可移植性,但如果要进行算数运算,就需要把char显式的声明为signed或者unsigned;许多处理字符的库函数将他们的参数声明为char,字符数组类型,显式声明可能会带来兼容性问题。
5.九种整型:char unsigned char signed char int unsigned int short unsigned short long unsigned long
6.整型常量的类型取决于它的书写形式,但是你可以在某些常量的后面添加一个后缀来改写缺省的规则,L或l可以使这个整型常量解释为long整型值。书写时采用最容易表达的形式,如地址采用十六进制
7.标准也允许多字节常量和宽字符常量,用来表示像unicode等的字符集
8.枚举类型的值为符号类型,而不是整型常量,类似于#define定义的符号常量
9.浮点类型:float double long double,没有unsigned或signed之分,用来表示小数和大于整数范围的实数,在内存中的表示形式颇为复杂:符号位,阶码,有效数字
10.C语言没有字符串常量,对于字符串的操作应该充分利用字符串库函数,库函数经常使用字符数组而不是字符指针
二、基本声明
1.注意数组下标的检查,越界
2.数组可以在定义的同时初始化,或者在定义后逐个进行初始化,但不可整体初始化,字符串可以利用库函数进行初始化
3.使用typedef机型类型的创建,而不是#define,
4.const将一个变量声明为常量,不可进行修改,两种初始化方法:在声明的时候进行初始化,声明为形参的函数在调用时会得到实参的值
三、作用域,链接属性,存储类型,
1.四种作用域:文件作用域、原型作用域、函数作用域、代码块作用域
2.链接属性有3种:外部(external),内部(internal),和无链接属性(none)。没有链接属性的标识符总是被当作单独的个体,也就是说该标识符的多个声明被当作独立的不同的个体。属于internal链接属性的标识符在统一个源文件中的所有声明都指同一个实体,但位于不同源文件的多个声明则分属于不同的实体,属于external的标识符不论被声明多少次、位于几个源文件都被表示为同一个实体
3.static只对缺省为external的声明才有改变的效果,已经声明的标识符第二次出现时,并不会改变第一次声明的链接属性
4.static:修饰代码块内的变量时,使它的存储类型从自动变为静态;函数和外部变量被声明为static时,作用域为本文件,链接属性为internal
函数的形参不能声明为静态,因为实参总是在堆栈中传递给函数,用于支持递归
5.对于频繁执行间接访问的指针,如果声明为寄存器变量,效率会大大提高
6.只要变量并非声明在代码块或函数定义内部,在缺省情况下的链接属性即为external,如果一个变量声明为代码块内部,在它前面添加extern关键字将使它引用的全局变量而不是局部变量
7.与外部变量同名的局部变量将使全局变量在局部变量的作用域失效;对于函数来说,存储类型不是问题,因为它总是存储在静态内存中;代码块内或函数定义中引用的外部变量的作用域同局部变量