3

実行時に123456789を取得することを期待して、以下のコードを記述しました。しかし、代わりに私は124457789を取得し、私の人生のためにその理由を理解することができます。なぜ私のコードは、私が想定していることを実行しないのですか?

番号を変更しても、3番目と6番目の番号は4番目と7番目の番号と同じです。

#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

マトリックスは2x2宣言であるため、からからの[0][0]みインデックス付けできます。[1][1]にインデックスを付けているため[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

2x2ではなく3x3アレイである必要があります。

int matrix[3][3];

そうしないと、2でインデックス付けされたものは、未定義の動作を引き起こします。

于 2012-12-31T22:42:12.650 に答える