3

我编写了下面的代码,期望在运行时得到 123456789。然而,相反,我得到了 124457789,我可以终生找出原因。为什么我的代码不能做我认为它应该做的事情?

如果我更改数字,第三个和第六个数字仍将与第四个和第七个数字相同。

#include<iostream>
#include<string>
#include<cmath>

using namespace std;

int main(){

    int matrix[2][2];
    matrix[0][0]=1;
    matrix[0][1]=2;
    matrix[0][2]=3;
    matrix[1][0]=4;
    matrix[1][1]=5;
    matrix[1][2]=6;
    matrix[2][0]=7;
    matrix[2][1]=8;
    matrix[2][2]=9;

    cout<<matrix[0][0];
    cout<<matrix[0][1];
    cout<<matrix[0][2];
    cout<<matrix[1][0];
    cout<<matrix[1][1];
    cout<<matrix[1][2];
    cout<<matrix[2][0];
    cout<<matrix[2][1];
    cout<<matrix[2][2];
}
4

2 回答 2

4

您的矩阵只能从[0][0]through索引[1][1],因为它是 2x2 声明。您正在索引[2][2],因此这是未定义的行为。

将您的矩阵声明为并重matrix[3][3]试。

编辑使用模/除法循环以 1-9 加载。

int matrix[3][3];
for (int i=0;i<9;++i)
    matrix[i/3][i%3] = (i+1);

盯着它看一会儿,看看你是否理解它与你相当大的直接分配堆栈的结果是一样的。同样在打印方面:

for (int i=0;i<9;++i)
    cout << matrix[i/3][i%3];
cout << endl;
于 2012-12-31T22:41:18.737 回答
1

应该是 3x3 数组,而不是 2x2:

int matrix[3][3];

否则,任何用 2 索引的东西都会导致未定义的行为。

于 2012-12-31T22:42:12.650 回答