我一直在努力调试一些代码,并将我的问题缩小到一个简单的问题,这个问题应该很容易解决,但由于某种原因,我在过去的几个小时里一直在回避这个问题。我下面用于显示二维数组值的代码没有显示我想象的方式。我是C ++的新手,所以如果问题得到解决,我就不会感到惊讶。在这一点上,我不知道是什么导致了我的问题。任何帮助都会受到赞赏!
这是一些简化的代码,用于在网格中显示3个字符乘3个字符的二维数组。
char board[2][2];
board[0][0] = '1';
board[0][1] = '2';
board[0][2] = '3';
board[1][0] = '4';
board[1][1] = '5';
board[1][2] = '6';
board[2][0] = '7';
board[2][1] = '8';
board[2][2] = '9';
cout << board[0][0] << " ";
cout << board[0][1] << " ";
cout << board[0][2] << endl;
cout << board[1][0] << " ";
cout << board[1][1] << " ";
cout << board[1][2] << endl;
cout << board[2][0] << " ";
cout << board[2][1] << " ";
cout << board[2][2] << endl;
以下文字是上述代码的输出结果。由于某种原因,值3没有显示在第一行,最后一列,正如我认为的那样。取而代之的是4位于其位置,然后是第一列中下一行的另外4位。在第二行的最后一列中可以看到同样的问题,其中7代替我认为应该是6的位置,然后是第三行第一列的另外7位。
1 2 4
4 5 7
7 8 9
答案 0 :(得分:2)
在C ++声明中
char board[2][2];
声明大小为2x2的char数组。索引从0开始,因此所有有效索引都是:
0,0
0,1
1,0
1,1
使用大于1的索引写入数组,即
board[2][0] = '7';
是未定义的行为。
答案 1 :(得分:0)
James Adkison在评论中提供了正确的答案。出于某种原因,我曾认为数组大小声明符从0开始而不是1,因此需要使用board [3] [3]而不是board [2] [2]来声明3x3数组。