2013-05-08 132 views
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]; 

我想穿越了我的阵列和简单组和打印columns.Can't图什么看起来工作正常,直到下面例子中的第3次迭代:

假设我的输入值是1 2 3 4 5 6 7 8 9

我得到:

1 4 7 

2 5 8 

4 7 (something random) 
+1

你是你的阵列上会出界。如果您使用的是C++,请改为使用多维向量。 [多维矢量 - 如何](http://stackoverflow.com/a/823600/195488) – 2013-05-08 12:55:40

回答

4

m += j; 

你第一次由0增加m,然后通过一个,然后通过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; 
} 
+0

只是一个小错误,我猜:第一次迭代必须是j SpiderRico 2013-05-08 13:21:06

+0

@ user2362377对,并且使用非方形矩阵,'*(m + i + j)'也可以访问越界,所以我现在也修正了这个问题。 – 2013-05-08 13:39:40

1
m = &a[0]; 
for (j = 0; j < d1; j++) 
{ 
    for (i = 0; i < d2; i++) 
     cout << *m++; 
    cout << endl; 
}