关于操作本机数组的快速问题

no.*_*nod 0 c c++ arrays dynamic-memory-allocation

#include <iostream>

int
main(void)
{
    int n;
    std::cin >> n;

    int x[n];

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

从C的角度来看,上面的代码不应该正确编译,因为我猜想数组'x'的大小还没有定义.

只有在用户传递变量'n'的参数后,才能定义'x'的大小,但编译和运行时代码没有崩溃,我想知道为什么.

如果它是用C语言编写的,我认为人们会将malloc用于运行时可配置数组.

也许我对数组,内存分配,编译器以及c和c ++之间的关系有一些误解.如果我错了,请纠正我.

mel*_*ene 7

不,从C的角度来看,代码无效,因为<iostream>它不是C头并且std::cin是语法错误.另一方面,这int x[n];部分很好:它是一个可变长度数组,这是C99首次引入的一个特性.

标准C++没有可变长度(本机)数组.g ++ 允许它们作为扩展,但是:

ISO C99允许使用可变长度自动数组,作为扩展,GCC在C90模式和C++中接受它们.

通常,在C++中,您可以使用std::vector.