如果我們初始化在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
如果我們初始化在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
爲什麼它編譯
是形成不良的程序。但是,某些編譯器支持將可變長度數組作爲語言擴展,因此可以同時顯示兩個示例程序。
爲什麼......但不能正常工作?
我懷疑你是否期望程序的行爲與其行爲不同。 爲什麼它會有不同的行爲取決於你的預期。或者你可能試圖創建一個比堆棧更大的數組。
我在問題中添加了一些更多細節。這是我正在嘗試做的。使用Gcc C++ 14編譯器 –
@ANUBHAVUJJAWAL我無法重現您的問題:http://coliru.stacked-crooked.com/a/25162f0a500166c6我建議檢查您的編譯器手冊以查看VLA的值初始化是否受支持。我非常肯定它在C99中是不允許的,在那裏指定VLA。 – user2079303
發生了什麼?爲什麼你不能重現它? –
這不是標準C++。另外,請定義「不能正常工作」 – Rakete1111
「工作不正常」呃? –
有一個(相當聰明的)思想流派說你可能不應該在C++中使用裸數組,就像在'char'數組上使用'std :: string'一樣。將C背景強加於C++的人最好稱爲C++程序員:-)完全接受該語言並使用真正的集合,如「std :: vector」。 – paxdiablo