这种语法叫做变长数组(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释放内存