注意:变长数组有生命周期,{}。
 


c99的编译器才支持这种可变数组
如果你不是c99的编译器
那你只要使用
#define test **来进行常量定义

在 《Programming in C》,里面讲数组时讲到了“变量长度数组”,说有的编译器支持这样的用法:

int i=10;
char buf[ i ];

测试发现VC6是不支持这个的,但是GCC支持!我写了这样的测试代码:
发现程序居然也支持i是负数,而且在负数的情况下,GCC的内存分配虽然怪异,但也是保证正确的。
 
 
 
 
 
 
c99  
  新的变长数组(variable-length   array,VLA)已经部分可用。可以用简单的   VLA。不过,这纯粹是一个巧合;实际上,GNU   C   有其自己的变长数组支持。结果,虽然使用变长数组的简单代码将可以工作,但是大量的代码会遇到旧的   GNU   C   对   VLA   的支持与   C99   定义之间在在差异的麻烦。可以声明长度为本地变量的数组,但是就到此为止吧。
 
 
 
 
C99 之前,声明数组时,[] 中的值必须是大于零的整数常量。C99 中,声明数组时,[] 中可以是变量。这就是所谓的变长数组(variable-length array,简称 VLA)。声明 VLA 时,不能对其进行初始化。
int n = 99;
double dbl_1[4]; /* 正确 */
double dbl_2[8/2 + 4]; /* 正确 */
int iar_1[-5]; /* 错![] 中的值必须大于 0 */
int iar_2[0]; /* 错![] 中的值必须大于 0 */
int iar_3[9.2]; /* 错![] 中的值必须是整数类型 */
char ch[n]; /* C99 之前不支持! */