C语言怎样定义变长数组

Python023

C语言怎样定义变长数组,第1张

”变长数组“确实是有的,是在C99标准才出现的。题主的写法没有错。变长指的就是可以用变量指定数组大小,而不是说数组大小可以在runtime改变。(”变长“这个这个翻译很怪啊.....)

写全的话应该是

int x = 2 //x定义并赋值,当然不一定是2

char array[x]测试了一下,这样的代码在VC6.0下会报错,因为对C99新标准没有很好地实现。VS2005也不行。VS2013可以正确编译。gcc

3.2.2也可以正确编译。

动态分配的数组可以自定义数组的长度,示例如下:#include<stdio.h>#include<string.h>#include<stdlib.h>intmain(){printf("输入要分配的内存大小:")intsizescanf("%d",&size)//输入自定义的数组长度int*pstart=(int*)malloc(sizeof(int)*size)if(pstart==0){printf("不能分配内存\n")return0}memset(pstart,0x00,sizeof(int)*size)intinxfor(inx=0inx!=size++inx)pstart[inx]=inxfor(inx=0inx!=size++inx)printf("%d\t",pstart[inx])printf("\n")return0}

如果一个数组具有动态存储周期(也就是说,如果在语句块内定义数组,并且没有 static 修饰符),那么 C99 也允许把非常量表达式作为元素数量来定义该数组。这样的数组被称为长度可变数组(variable-length array)。而且,长度可变数组的名称必须是普通的标识符。长度可变数组不能作为结构或联合的成员。在下面的示例中,只有 vla 数组的定义是合法的:void func( int n ){int vla[2*n]// 合法:存储周期为动态的static int e[n] // 非法:长度可变数组不可有静态存储周期struct S { int f[n]} // 非法:f不是一个普通标识符/* ... */}