这是为数组赋值的一种方法
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
?
首先,它不应该抱怨我们使用超出索引的数组,其次是为什么会有这么大的差异?
答案 0 :(得分:4)
使C和C ++快速发展的一个原因是不会检查你是否超越了数组的界限。
而是获得undefined behavior。当你触发它时,任何事情都可能发生。您的程序可能会崩溃,可能看起来工作正常,或者可能会产生奇怪的结果。
答案 1 :(得分:1)
首先,它不应该抱怨我们正在使用超出索引的数组
没有。如果您使用数组越界,该标准没有指定程序应该抱怨。该标准指定行为未定义。
其次为什么这么大的差异?
行为未定义。在这两种情况下。