【知识总结】数据
一、基本数据类型
1.1整型家族包括字符、短整型、整型和长整型,他们都分为有符号(singed)和无符号(unsigned)
【注】在需要考虑程序的可移植性的时候,应该注意个数据类型所代表的范围。
(1)整型字面值:字面值(literal)这个术语是字面值常量的缩写(是一种制定了自身的值且不允许改变的实体);
(2)枚举类型:就是指它的值为符号常量而不是字面值的类型;
1.2浮点类型家族包括float、double和long double类型
【注】浮点数字面值在缺省情况下都是double类型的,除非它的后面跟一个L或l表示它是一个long double类型的值,
或者跟一个F或f表示它是float类型的值。
1.3指针
(1)指针常量:注意指针常量与非指针常量的区别;
(2)字符串常量:字符串就是以NUL字节结尾的零个或者多个字符;
二、基本声明
2.1初始化
2.2声明简单数组
【注】编译器并不检查程序对数组下标的引用是否在数组的合法范围之内。
2.3声明指针
【注】(1)建议把*放在靠近表达式的一边,例:int *a, *b, *c;
(2)char *message = “hello”;等价于char *message; message = “hello”;
2.4隐式声明:在C语言中如果不显示声明变量或者函数返回类型编译器默认为整型
【注】勿依赖于隐式声明;
三、typedef
【注】应该使用typedef而不是#define来创建新的类型名;
四、常量
(1)int const a; 与 const int a;等价
(2)int *pi; //pi是一个普通的指向整型的变量;
int const *pci; //一个指向整型常量的指针:你可以修改指针的值,但你不能修改它所指向的值;
int *const pci; //声明一个指向整型的常量指针。此时指针是常量,它的值无法修改,但你可以修改它所指向的整型的值;
int const *const pci; //无论指针本身还是它所指向的值都是常量;
【注】#define与const的区别:允许使用字面值常量的都可以使用前者,而后者只能用于允许使用变量的地方。
五、作用域
5.1代码块作用域
位于一对花括号之间的所有语句称为一个代码块。任何在代码块的开始位置声明的标识符都具有代码块作用域(block scope),表示它们可
以被这个代码块中的所有语句访问。
【注】应该避免在嵌套的代码块中出现相同的变量名;
5.2文件作用域
任何在所有代码块之外声明的标识符都具有文件作用域(file scope) ,它表示这些标识符从它们的声明之处直到它所在的源文件结尾处都是可以访问的。
5.3原型作用域
原型作用域(prototype scope)只适用于在函数原型中声明的参数名。
5.4函数作用域
函数作用域(function scope)只适用于语句标签,语句标签用于goto语句。
六、链接属性
链接属性一共有3种:external(外部)、internal(内部)和none(无)。没有链接属性(none)的标识符总是被当作单独的个体,也就是说该标识符的多个
声明被当作独立不同的实体;属于internal链接属性的标识符在同一个源文件内的所有声明中都指同一个实体,但位于不同源文件的多个声明则分属不
同的实体;属于external链接属性的标识符不论声明多少次、位于几个源文件都表示同意实体。
【注】(1)仅对链接属性或者缺省链接属性为external的声明在其前面加上static可以将其属性变为internal;
(2)extetnal只有第一次用于某标识符的声明时,才指定该标识符具有external属性,如果用于该标识符的第2次或以后的声明不改变齐链接属性;
七、存储类型
变量的存储类型是指存储变量值的内存类型。变量的存储类型决定了变量何时创建、何时销毁以及它的值保持多久。有三个地方可以用于存
储变量:普通内存、运行时堆栈、硬件寄存器;三个关键字:static、auto、register。