2012-07-15 159 views
-3
#include "stdio.h" 

void main(){ 
int a[2][2]={1, 2, 3, 4}; 
int a[2][2]={1, 2, 3, 4}; 
display(a, 2, 2); 
show(a, 2, 2);} 
} 

display(int *k, int r, int c){ 
int i, j, *z; 
for(i = 0; i < r; i++){ 
    z = k + i; 
    printf("Display\n"); 
     for(j = 0; j < c; j++){ 
      printf("%d", *(z + j)); 
     } 
    } 
} 

show(int *q, int ro, int co){ 
int i, j; 
    for(i = 0; i < ro; i++){ 
    printf("\n"); 
    for(j = 0; j < co; j++){ 
     printf("%d", *(q + i*co + j)); 
    } 
    } 
} 

输出:印刷2D阵列

Display 
12 
23 
Show 
12 
34 

为什么Display()没有显示1223而show()给出1234?两者都使用相同的逻辑来显示二维数组。任何人都可以帮忙吗?

+4

第一,把我们的代码以可读格式! – cybertextron 2012-07-15 15:06:04

+1

请花费少量的时间来弄清楚如何正确缩进代码。这里没有人想要读那混乱。 – meagar 2012-07-15 15:07:44

+0

如果你太懒惰,至少在copypasting之前在你的文件上运行'indent -kr' ... – 2012-07-15 15:09:14

回答

0

display您使用两个计数器,i用于行,j用于列。由于数组按顺序排列在内存中,因此每次要从一行移动到下一行时,需要按列的大小(即c)增加i。所以,你应该添加i*c到k,而不是i

完整的功能:

display(int *k,int r,int c){ 
int i,j,*z; 
for(i=0;i<r;i++){ 
    z=k+i*c; 
    printf("Display\n"); 
     for(j=0;j<c;j++){ 
      printf("%d",*(z+j)); 
     } 
    } 
} 
+0

非常感谢你...... :) – 2012-07-15 15:35:50