1
要初始化一個二維數組,通常我們可以做到這一點是這樣的:意外的初始化結果
int matrix[3][4] = { {1,1,1,1}, {2,2,2,2}, {3,3,3,3} };
然而,正如我與不同的組合測試它,下面的代碼並編譯出乎我的意料:
int matrix[3][4] = {1,2,3,4,5,6,7};
當我打印出來的輸出在二維表的形式,我得到:
1,2,3,4,
5,6,7,0,
0,0,0,0,
我明白爲什麼其餘的值是零。
我的問題是:這是一種合法的方式來初始化二維數組,通過假設數字超過行的邊界將永遠「流」到下一行?或者這是我應該避免在C++中的另一個陷阱?
這是完全合法的。自從標準化之前,它一直是C和C++的一部分。儘管您可能認爲更明確的版本更易於閱讀。 –
@AlanStokes感謝您的回覆,當我知道它是合法的時候,我有點驚訝,因爲我認爲它確實編譯了,因爲C++沒有檢查邊界,並且數字只是坐在下一個可用內存中。或者我可以這樣說,因爲下一個可用內存也是「保留」的數組的一部分。這樣做很好嗎? – user3437460
@ user3437460如果不檢查邊界,編譯器如何將其中的任何值設置爲0?如果超出邊界,將導致編譯器錯誤。 – user6276096