#include <iostream>
int
main(void)
{
int n;
std::cin >> n;
int x[n];
return 0;
}
从C的角度来看,我想上面的代码不应该正确编译,因为我想还没有定义数组'x'的大小。
仅在用户传递变量'n'的参数后,才能定义'x'的大小,但是代码在编译和运行时不会崩溃,我想知道为什么。
如果它是用C编写的,我认为人们会在运行时可配置数组中使用malloc。
也许我对数组,内存分配,编译器以及c和c ++之间的关系有一些误解。如果我错了,请纠正我。
答案 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
。