如何在C ++中实现动态数组?

时间:2012-06-17 15:00:27

标签: c++

在创建数组时,编译器必须知道它的大小?例如,以下代码段无法编译。

class A
{
   int n;
   int arr[n];
};  

但是,以下编译。

int main()
{
  int n;

  std::cin >> n;
  int arr[n];
}

为什么?

4 个答案:

答案 0 :(得分:5)

标准C ++不支持可变长度数组。 1

如果你想要这种行为,我建议使用std::vector而不是原始的C风格数组。


<子> 1。但是,您可以在C99或非标准语言扩展中找到它们。

答案 1 :(得分:4)

(1) 创建A实例时发生的第一件事是分配内存,此时成员n不存在,因此无法知道arr需要多少内存。

(2)在堆栈上创建一个数组,这只会稍微移动堆栈指针。

答案 2 :(得分:1)

如果要创建可变大小的数组,则必须使用new在堆上执行此操作。如果你已经将整数声明为常量,那么你可以按照你的方式使用它的唯一方法。

答案 3 :(得分:0)

在编译时,变量n的值是未知的(它只是在给定地址下的内存中),因此您无法创建未知大小的变量。 在第二种情况下,你知道大小,因为你已经使用了cin(而不是罪恶)。