[英]What is the difference between these two assignments?
這是為數組賦值的一種方法
char s[2][2];
s[0][0] = 1;
s[0][1] = 2;
s[1][0] = 3;
s[1][1] = 4;
cout << s[0][2];
這個輸出將是一些垃圾,它會不斷變化。 但是當我這樣做時會發生奇怪的事情
char s[2][2];
for (int i = 0, j = 0; i <= 2; i++){
if(i == 2)
{
j++;
i = 0;
}
if(j == 2) break;
cin >> s[j][i];
}
cout << s[0][2];
所以當我給出輸入時
1 2
3 4
輸出是3
?
首先,它不應該抱怨我們正在使用超出其索引的數組,其次為什么會有如此大的差異?
使 C 和 C++ 快速的一件事是它不檢查您是否超出了數組的邊界。
相反,您會得到未定義的行為。 當您觸發此操作時,任何事情都可能發生。 您的程序可能會崩潰,可能看起來工作正常,或者可能會產生奇怪的結果。
首先,它不應該抱怨我們正在使用超出其索引的數組
不可以。標准沒有規定如果你使用數組越界,程序應該抱怨。 該標准指定行為未定義。
其次為什么差別這么大?
行為未定義。 在這兩種情況下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.