cin>>n;
int * a;
a=new int[n];
int b[n];
我認爲在這兩種情況下是動態創建陣列(指正)。所以,我們爲什麼不喜歡第二種情況在第一,因爲第二個是短而簡單。差2之間動態數組initilising
cin>>n;
int * a;
a=new int[n];
int b[n];
我認爲在這兩種情況下是動態創建陣列(指正)。所以,我們爲什麼不喜歡第二種情況在第一,因爲第二個是短而簡單。差2之間動態數組initilising
第二個不能用標準C++工作。它的確在C中有效。一些編譯器提供了允許這樣做的擴展(C++),但它又是非標準的。 C++ 14將帶有std :: dynarray,這基本上是第二種「方式」所做的。
因爲這是誤導。
int b[n]
用於靜態數組聲明。原則上在C++中是不允許的(在n不是常數的情況下),它只是編譯器擴展,它可以將int b[n]
轉換爲int *b = new int[n]
。
在這種情況下,最好使用std ::載體,這也短,但不會誤導:
vector<int> b(n);
的一個重要區別是,第一個在堆和分配內存,用適當的參考,可以在所有的程序中訪問。應該釋放一次不是引用(相應地調用delete
)。
第二個將它分配到堆棧中,您可以在Why no VLAs in C++0x?處查看,這是對VLA的主要抱怨之一。該內存在退出當前塊後釋放。
另一方面,嚴格來說,它們都不是動態數組(動態添加/刪除多餘的元素)。如果你想使用動態數組,我會建議使用std::vector
。雖然更適合於提供示例,但將使用std::array
您需要了解C++中的內存管理是如何工作的。即堆棧中由「new」和存儲器分配的堆中的存儲器。 –
第二個不行。像Barmaley說的 –
- 爲什麼甚至會問一個關於直接不能編譯的東西的問題? –