C语言数组为什么能用变量定义

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此时就是整数,因此可以运行成功.
所以这种也是可以的!