有关处理本机数组的快速问题

时间:2018-11-19 01:34:41

标签: c++ c arrays dynamic-memory-allocation

#include <iostream>

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

    int x[n];

    return 0;
}

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

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

如果它是用C编写的,我认为人们会在运行时可配置数组中使用malloc。

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

1 个答案:

答案 0 :(得分:7)

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

标准C ++没有可变长度(本机)数组。 g ++ allows them as an extension,但:

  

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

通常,在C ++中,您将使用std::vector