这两项任务有什么区别?

时间:2017-01-06 20:45:06

标签: c++ arrays

这是为数组赋值的一种方法

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

首先,它不应该抱怨我们使用超出索引的数组,其次是为什么会有这么大的差异?

2 个答案:

答案 0 :(得分:4)

使C和C ++快速发展的一个原因是不会检查你是否超越了数组的界限。

而是获得undefined behavior。当你触发它时,任何事情都可能发生。您的程序可能会崩溃,可能看起来工作正常,或者可能会产生奇怪的结果。

答案 1 :(得分:1)

  

首先,它不应该抱怨我们正在使用超出索引的数组

没有。如果您使用数组越界,该标准没有指定程序应该抱怨。该标准指定行为未定义。

  

其次为什么这么大的差异?

行为未定义。在这两种情况下。