2动态数组初始化之间的区别

时间:2013-11-24 20:15:12

标签: c++ arrays pointers

cin>>n; 

int * a;
a=new int[n];

int b[n];

我认为在这两种情况下,数组都是动态创建的(正确的)。所以为什么我们不首先选择第二种情况,因为第二种情况更简单,更容易。

3 个答案:

答案 0 :(得分:4)

第二个在标准C ++中不起作用。然而它确实在C中工作。有些编译器提供允许这样做的扩展(C ++),但它同样不是标准的。 C ++ 14将附带std :: dynarray,它基本上是第二种“方式”。

答案 1 :(得分:0)

因为它具有误导性。

int b[n]用于静态数组声明。原则上在C ++中是不允许的(如果n不是常数),它只是编译器扩展,它可以帮助您将int b[n]转换为int *b = new int[n]

在这种情况下最好使用std :: vector,这也很短,但不会误导:

vector<int> b(n);

答案 2 :(得分:0)

一个重要的区别是第一个在堆中分配内存,并且可以在所有程序中访问适当的引用。应该释放一次不是引用(相应的调用delete)。

第二个将它分配到堆栈中,因为您可以在Why no VLAs in C++0x?处查看,这是针对VLA的主要抱怨之一。退出当前块后,将释放此内存。

另一方面,严格来说,它们都不是动态数组(你不能动态添加/删除额外的元素)。如果您想使用动态数组,我建议您使用std::vector。虽然更适合提供的示例,但使用std::array