为啥我自定义了数组的长度还是可以运行

#include<stdio.h>
int main()
{
    int n,i,j,k,m;
    scanf("%d",&n);
    int a[n];
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(j=0;j<n;j++)
    {
        for(k=0;k<n-j-1;k++)
        {
            if(a[k]>a[k+1])
            {
                int c=a[k];
                a[k]=a[k+1];
                a[k+1]=c;
            }
        }
    }
    int sum=0;
    for(m=1;m<(n-1);m++)
    {
        sum+=a[m];
        printf("%d\n",a[m]);
    }
    double average=sum/(n-2);
    printf("%lf",average);
    return 0;
}

img


为什么我的这个数组定义了长度但是还是对的呢

首先从语法来说,C语言从C99标准开始,这种定义方式是合法的,只是以前的标准不支持而已,而对于各种编译器来说,支持的语法特性有所区别,所以有些就可以运行,有些不可以

你的编译器支持。

int n=0;
scanf("%d",&n);
int* a=(int*)malloc(sizeof(int)*n);

这样相当于创建好了长度为n的整型数组a
记得包含头文件#include <stdlib.h>

好嘞,谢谢谢谢