cin>>n;
int * a;
a=new int[n];
int b[n];
我认为在这两种情况下,数组都是动态创建的(正确的)。所以为什么我们不首先选择第二种情况,因为第二种情况更简单,更容易。
答案 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