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;

您首先递增m0,然后递增 1,然后递增 2。如果我们最初复制了一份

int *start = m;

然后在外循环的第一次迭代中,我们有

m == start

在第二,

m == start + 1

在第三

m == start + 3

你会想要m == start + 2那里。除了你想在最后保持mdelete,所以你根本不应该改变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 回答