当前位置:嗨网首页>书籍在线阅读

07-指定数组的大小

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

10.1.5 指定数组的大小

本章前面的程序示例都使用整型常量来声明数组:

#define SIZE 4
int main(void)
{
     int arr[SIZE];        // 整数符号常量
     double lots[144];     // 整数字面常量
     ...

在C99标准之前,声明数组时只能在方括号中使用整型常量表达式。所谓整型常量表达式,是由整型常量构成的表达式。 sizeof 表达式被视为整型常量,但是(与C++不同) const 值不是。另外,表达式的值必须大于 0

int n = 5;
int m = 8;
float a1[5];                  // 可以
float a2[5*2 + 1];            //可以
float a3[sizeof(int) + 1];    //可以
float a4[-4];                 // 不可以,数组大小必须大于0
float a5[0];                  // 不可以,数组大小必须大于0
float a6[2.5];                // 不可以,数组大小必须是整数
float a7[(int)2.5];           // 可以,已被强制转换为整型常量
float a8[n];                  // C99之前不允许
float a9[m];                  // C99之前不允许

上面的注释表明,以前支持C90标准的编译器不允许后两种声明方式。而C99标准允许这样声明,这创建了一种新型数组,称为变长数组(variable-length array)或简称VLA(C11放弃了这一创新的举措,把VLA设定为可选,而不是语言必备的特性)。

C99引入变长数组主要是为了让C成为更好的数值计算语言。例如,VLA简化了把FORTRAN现有的数值计算例程库转换为C代码的过程。VLA有一些限制,例如,声明VLA时不能进行初始化。在充分了解经典的C数组后,我们再详细介绍VLA。