为什么可变长度数组在这个C代码中工作?

时间:2013-12-28 08:18:30

标签: c arrays

#include "stdio.h"

int main()
    {
        int n;
        printf("Enter n:\n");
        scanf("%d",&n);

        int arr[n][n];
        arr[3][3] = 4;
        printf("%d",arr[3][3]);
        getchar();
        return 0;
    }

没有使用int arr[n],其中n是变量,在C中是非法的?我想知道这里发生了什么。显然,代码适用于我的clang LLVM compilerIDEOne以及代码块。我想编译器只是通过自动内存分配让事情变得简单。但另一个令人震惊的事实是,当我尝试将n设置为1,2或3时,它仍然有效。

1 个答案:

答案 0 :(得分:6)

自C99起,C标准允许使用可变长度数组。请注意,C ++仍然不允许它们 标准。
另外需要注意的是,对于c99之前的版本,对于大多数C ++编译器,可扩展形式的实现支持可变长度数组。