2
for ( j = 0; j < d1; j++ ){

    m += j;
        for ( i = 0; i < d1*d2; i +=d2){
        cout << *(m+i);
        }
    cout << endl;
}

d1、d2 は配列の次元です

int* m = new int [d1*d2];

配列をトラバースし、列をグループ化して出力したいだけです。このコードの何が問題なのかわかりません。次の例では、3 回目の反復まで正常に動作しているようです。

私の入力値が1 2 3 4 5 6 7 8 9

私は得る:

1 4 7

2 5 8

4 7 (something random)
4

2 に答える 2

4

m += j;

最初に 0 ずつインクリメントmし、次に 1 ずつ、次に 2 ずつインクリメントします。最初にコピーを作成した場合

int *start = m;

外側のループの最初の反復では、次のようになります。

m == start

第二に、

m == start + 1

三番目に

m == start + 3

あなたはm == start + 2そこにいたいでしょう。m最後に順番に保持したい場合を除いてdelete、まったく変更mしないで、次のようなものを使用してください

for ( j = 0; j < d2; j++ ){

        for ( i = j; i < d1*d2; i +=d2){
        cout << *(m+i);
        }
    cout << endl;
}
于 2013-05-08T12:56:05.107 に答える
1
m = &a[0];
for ( j = 0; j < d1; j++ )
{
    for ( i = 0; i < d2; i++)
        cout << *m++;
    cout << endl;
}
于 2013-05-08T12:55:51.710 に答える