1.C语言 仅有4种基本数据类型----整型,浮点型,指针和聚合类型(如数组和结构等)
2.char可为signed或者unsigned,所以只有当程序中的char的值位于signed char 和 unsigned char的交集中,这个程序才是可移植的,因为ASCII的字符都是位于这个范围内的
浮点数能够处理正数和负数,signed/unsigned不能用于修饰浮点数
3.标准规定一个最小范围:所有浮点类型至少能够容纳从10的-37次方到10的37次方之间的任何值
4.函数如果不显式地声明返回值的类型,它就默认返回整型
5.typedef允许你为各种数据类型定义新名字,貌似#define也可以完成类似的功能,但是我们还是应该使用typedef,因为后者无法正确地处理指针类型,如:
#define d_ptr char*
d_ptr a,b;
正确地声明了a,但是b却被声明为一个字符,这里还要注意一下#define后无分号,不然将一起当作定义转换
6.正确地辨识 int const *pci 或 const int *pci
int * const pci
int const * const pci
7.链接属性 一共有三种 external外部,internal内部和none无,没有链接属性的标识符(none)总是被当作单独的个体,也就是说该标识符的多个声明被当作独立不同的实体,属于internal链接属性的标识符在同一个源文件内的所有声明中都指向同一个实体,但位于不同源文件的多个声明则分属不同的实体,属于external链接属性的标识符不论声明多少次,位于几个源文件都表示同一个实体
如果某个声明在正常情况下具有external链接属性,在它前面加上static关键字可以使它的链接属性变为internal 例如:
static int c(int d) 就可以防止它被其他源文件调用
static只对缺省链接属性为external的声明才有改变链接属性的效果
当external关键字用于源文件中一个标识符的第一次声明时,它指定该标识符具有external链接属性,但是,如果它用于该标识符的第二次或以后的声明时,它并不会更改由第一次声明所指定的连接属性,例如:
static int i
external int i
此时i并不是external属性,也就说明后面的声明时无效的
8.变量的存储类型决定变量何时创建,何时销毁以及它的值将保持多久,有三个地方可以用于存储变量:普通内存,运行时堆栈,硬件寄存器
修改变量的存储类型并不表示修改该变量的作用域,它仍然只能在该代码块内部按名字访问,函数的形式参数不能声明为静态,因为实参总是在堆栈中传递给函数,用于支持递归
9.static关键字
(1)当它用于函数定义或用于代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从external改为internal,但标识符的存储类型和作用域不受影响
(2)当它用于代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量修改为静态变量,但变量的连接属性和作用域不受影响