允许在运行时不进行动态分配的数组大小?

允许在运行时不进行动态分配的数组大小?

我使用C+已经有几年了,今天我看到了一些代码,但是这怎么可能是完全合法的呢?

int main(int argc, char **argv){
    size_t size;
    cin >> size;
    int array[size];
    for(size_t i = 0; i < size; i++)
    {
        array[i] = i;
        cout << i << endl;
    }

    return 0;}

GCC主编。

如何在运行时不使用newmalloc?

为了再次检查,我搜索了一些与我类似的代码,声称它们存在存储大小错误。

即使是Deitel的C+如何在常见编程错误4.5下编程p.261状态:

只能使用常量来声明自动数组和静态数组的大小。

照亮我。


慕的地6264312
浏览 461回答 3
3回答

斯蒂芬大帝

这在C99中是有效的。C99标准支持堆栈上的可变大小数组。可能您的编译器也选择了支持这个构造。请注意,这与malloc和new.&nbsp;gcc分配堆栈上的数组,就像int array[100]通过调整堆栈指针。没有完成堆分配。就像_alloca.

繁星淼淼

这被称为VLA(可变长度数组)。它在C99中是标准的,但是GCC允许它在c+代码中作为扩展。如果您希望它拒绝代码,请尝试使用-std=standard,&nbsp;-ansi和-pedantic各种选择。
打开App,查看更多内容
随时随地看视频慕课网APP