c++ - 关于操作 native 数组的快速问题

标签 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++的关系有一些误解。如果我错了,请纠正我。

最佳答案

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

标准 C++ 没有可变长度( native )数组。 g++ allows them as an extension , 虽然:

Variable-length automatic arrays are allowed in ISO C99, and as an extension GCC accepts them in C90 mode and in C++.

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

关于c++ - 关于操作 native 数组的快速问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53367217/

相关文章:

C指针的声明困惑

c - C语言中如何删除字符串中的特殊字符

ios - 从 Swift 中的数组中删除当前对象

javascript - 具有属性子集的对象数组克隆

c - c中的快速排序算法实现

C++ : Is size_t a companion type just like size_type?

C++11 Boost,如何将 base64 解码回整数表示

c++ - 如果传递空范围,vector::erase() 返回什么迭代器?

c# - 无法将字符串从托管 c# 传递到非托管 c

c++ - 哪些 C++ 标准库头调用了 GCC 的 -pthread 选项要求?