-5

如果我們初始化在C二維數組++這樣的:在C++中以特定方式二維數組的動態初始化

int n; 
    cin>>n; 
    int a[n][1000]= {0}; 

爲什麼它編譯,但不能正常工作?我試圖在以下情況下訪問[4] [2]這給了我2,而它應該給我0時:

int n; 
    cin>>n; int a[n]= {0}; 

它工作絕對沒問題。使用GCC C++編譯器14

+1

這不是標準C++。另外,請定義「不能正常工作」 – Rakete1111

+0

「工作不正常」呃? –

+1

有一個(相當聰明的)思想流派說你可能不應該在C++中使用裸數組,就像在'char'數組上使用'std :: string'一樣。將C背景強加於C++的人最好稱爲C++程序員:-)完全接受該語言並使用真正的集合,如「std :: vector」。 – paxdiablo

回答

0

爲什麼它編譯

是形成不良的程序。但是,某些編譯器支持將可變長度數組作爲語言擴展,因此可以同時顯示兩個示例程序。

爲什麼......但不能正常工作?

我懷疑你是否期望程序的行爲與其行爲不同。 爲什麼它會有不同的行爲取決於你的預期。或者你可能試圖創建一個比堆棧更大的數組。

+0

我在問題中添加了一些更多細節。這是我正在嘗試做的。使用Gcc C++ 14編譯器 –

+0

@ANUBHAVUJJAWAL我無法重現您的問題:http://coliru.stacked-crooked.com/a/25162f0a500166c6我建議檢查您的編譯器手冊以查看VLA的值初始化是否受支持。我非常肯定它在C99中是不允許的,在那裏指定VLA。 – user2079303

+0

發生了什麼?爲什麼你不能重現它? –