c语言中,int a=3;再int b[a];可以吗?

int a=3;
int b[a];
这时,b有3个数组吗

这种语法叫做变长数组(VLA)
C99之前不行,C99开始就允许这种写法了,但VS编译器仍不支持这种写法
一般数组的长度必须用常量定义,可以改为:
const int a = 3;
int b[a];
const修饰常量,表示在变量初始化后就不会再改变
不推荐使用变长数组,因为数组的数据都存储在栈上,我们都知道栈是很小的,稍有不慎,数字大了一点就可能导致栈溢出,程序崩溃
所以如果数组的长度不定的话还是建议使用指针数组,指针数组的数据存储在堆上,除非电脑99%内存占用或者有太多内存碎片,否则一般都能分配内存成功,而且就算分配内存失败也不会直接崩溃,检查起来也很方便
int a = 3;
int* b = malloc(a * sizeof(int));
if (NULL == b) {
printf("内存不足\n");
}
//do something
free(b);
(malloc和free需要<stdlib.h>头文件
malloc在堆上分配内存,如果分配失败会返回NULL,free释放内存
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-08-29
早期的C语言不允许这样声明,现在的C语言编译器一般都是C99标准的,是允许用变量来定义数组大小的。按你上面的声明之后,b就是一个有三个元素的数组。
相似回答