1.数组的声明
C语言中,数组的声明可以有两种方式:
- 常用方法:直接使用数字或者使用宏定义
#define MAX 1024
char array[1024];
char another[1024];
- 可变长的数组(Variable Length Array)
在C语言C90标准中,如果我们需要动态数组,我们一般需要这样:
<pre name="code" class="cpp">int** array;
array = (char**)malloc(LENGTH * sizeof(int));
free(array);
这是由于在C90标准中,对象的大小必须在编译时候确定,这就很麻烦,为了简化这些操作,
C99标准中在
块作用域(block scope)加入了可变常数组(VLA)
<pre name="code" class="cpp"><pre name="code" class="cpp">int m = 10, n = 10;
int i, j;
int array[m][n];
for(i = 0; i < m; ++i)
{
for(j = 0; j < n; ++j)
a[i][j] = 1;
}
查阅资料我发现这其中原理是:当到达VLA声明语句时,数组就会被自动分配相应大小的空间,当离开VLA所在的块时就自动释放它所占用的空间。
这样就会大大方便代码的编写。
P.S.
注意到前面我写到在
块作用域中可以声明VLA,所以说它只能应用于
函数内部,在其他作用域都是不可以的。
以下这些使用方法都会得到:
error: variably modified ‘array’ at file scope
a.文件作用域中声明VLA
int m =10, n = 10;
int array[m][n];
int main()
{
array[0][0] = 1;
}
b.结构体声明
int m = 10;
struct str{
int array[m];
};