簡體   English   中英

這兩個任務有什么區別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM