C语言数组用变量定义 ,为什么也能正确定义 ,并输出正确结果。
#include<stdio.h>
int main()
{
int i;
scanf("%d",&i);
int a[i];
for(int j=0;j<=i;j++)//给相应数组赋值并输出每个数组的数字
{
a[j]=j;
printf("%d ",a[j]);
}
}
这是输出结果
20
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
严格来说,应该会有警告信息,inta[i]只是一个声明,并没有初始化,只是告诉编译器要干这个事,但实际上在这一步编译器并没有分配实际的内存空间。在后面才实现其定义,这种做法可行但不提倡
你用的什么编译器啊,竟然不报错,在检查严格的编译器中,int a[i]会直接报错的。
C语言中规定,数组的大小不能用变量,记住就行了。
在编译时,会把a记录为一个声明,在调用时,再给a分配空间,即实现定义,i此时就是整数,因此可以运行成功.
所以这种也是可以的!