background image
应该注意不能这样写:long a[0];,定义 0 个元素的数组是无意义的,编译
器将报错,不过在结构或类或联合中符合某些规则后可以这样写,那是 C 语言
时代提出的一种实现结构类型的长度可变的技术。
还应注意上面在定义数组时不能在方括号内写变量,即 long b = 10; float
a[ b ];是错误的,因为编译此代码时,无法知道变量 b 的值为多少,进而无法分
配内存。可是前面明明已经写了 b = 10;,为什么还说不知道 b 的值?那是因为
无法知道 b 所对应的地址是多少。因为编译器编译时只是将 b 和一个偏移进行
了绑定,并不是真正的地址,即 b 所对应的可能是 Base - 54,而其中的 Base
就是在程序一开始执行时动态向操作系统申请的大块内存的尾地址,因为其可能
变化,故无法得知 b 实际对应的地址。
但是编译器仍然可以根据前面的 long b = 10;而推出 Base - 54 的值为 10
啊?重点就是编译器看到 long b = 10;时,只是知道要生成一条指令,此指令将
10 放入 Base - 54 的内存中,其它将不再过问,故即使才写了 long b = 10;编
译器也无法得知 b 的值。
上面说数组是一种类型,其实并不准确,实际应为——数组是一种类型修
饰符,其定义了一种类型修饰规则。关于类型修饰符,后面将详述。
字符串