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)
答案 0 :(得分:4)
在
m += j;
您首先将m
递增0,然后递增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;
}
答案 1 :(得分:1)
m = &a[0];
for ( j = 0; j < d1; j++ )
{
for ( i = 0; i < d2; i++)
cout << *m++;
cout << endl;
}