2012-07-15 156 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