当n是变量,为什么int a[n]可以编译, int a[n]={0}不可以编译呢?
第一种情况
#include
int main() {
int n;
scanf("%d",&n);
int c[n];
return 0;
}
编译成功
第二种情况
#include
int main() {
int n;
scanf("%d",&n);
int c[n]={0};
return 0;
}
编译失败
这种定义就是错误的,不能定义a[n],下标只能是常量、算式或宏定义
C或者C++都不支持变长数组。C99标准是支持的,然而现在完全支持C99标准的编译器还没有,所以,这条语句不合法。
如果你写的C++,可以用 const int n = 5; int a[n]; 但是这种写法,在C中是不可以使用的。
你如果非要n的,可以用动态申请长度为n的数组,int n=5; int *a=new int[n]; 然后对数组赋值。
第一种情况严格来的都是错的,数组下标必须是一个常量,除非你是用malloc函数申请动态内存空间,在c++里可以用new申请
已解决。c99中引入一个概念叫做变长数组。支持数组创建时用变量指定大小。所以int n;int a[n];是可以编译的。但这个数组是不可以初始化的,所以int n;int a[n]={....};是不可以编译的。而不同的编译器上不一定都能支持c99,我是用的dev c++,所以支持c99,也就有了我提问的问题。像vs2019这种不支持c99,所以它连int n;int a[n]都不能编译。
按照道理不会啊,你在第二个代码定义数组的下面试试赋值会不会报错