為什么已定義數組外的第一個元素默認為零? [英] Why does the first element outside of a defined array default to zero?
本文介紹了為什么已定義數組外的第一個元素默認為零?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我正在為我的C++入門課的期末考試做準備。我們的教授給了我們這樣一個練習題:
解釋代碼產生以下輸出的原因:
120 200 16 0
using namespace std;
int main()
{
int x[] = {120, 200, 16};
for (int i = 0; i < 4; i++)
cout << x[i] << " ";
}
該問題的示例答案是:
我有點困惑,為什么數組外最后一個元素總是默認為零。為了進行實驗,我將問題中的代碼粘貼到我的IDE中,但將for循環更改為cout語句只是循環訪問其下標由for循環的增量定義的數組元素。元素大小不是由數組初始化定義的。for循環定義數組的大小,該數組的大小恰好超過初始化元素的數量,因此最后一個元素的默認大小為零。第一個for循環打印元素0(120),第二個循環打印元素1(200),第三個循環打印元素2(16),第四個循環打印默認數組值0,因為沒有為元素3初始化任何元素。此時,I現在超過條件,for循環終止。
for (int i = 0; i < 8; i++)
。然后輸出更改為120 200 16 0 4196320 0 547306487 32655
。當嘗試訪問超出定義大小的數組中的元素時,為什么沒有錯誤?程序是否只輸出上次將值保存到該內存地址后剩余的數據?
推薦答案
我有點困惑,為什么數組外最后一個元素 始終默認為零(&Q;)。
在此聲明中
int x[] = {120, 200, 16};
數組x
正好有三個元素。因此,在數組邊界之外訪問內存會調用未定義的行為。
也就是這個循環
for (int i = 0; i < 4; i++)
cout << x[i] << " ";
調用未定義的行為。數組最后一個元素后的內存可以包含任何內容。
另一方面,如果數組聲明為
int x[4] = {120, 200, 16};
也就是說,如果有四個元素,則數組中沒有顯式初始值設定項的最后一個元素確實會被初始化為零。
這篇關于為什么已定義數組外的第一個元素默認為零?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持IT屋!
查看全文