使用C中的指针打印2D数组

时间:2012-07-15 15:04:30

标签: c pointers multidimensional-array

#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));
     }
   }
}

输出:

Display
12
23
Show
12
34

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

2 个答案:

答案 0 :(得分:0)

display中,您使用了两个计数器,i表示行,j表示列。由于数组按顺序排列在内存中,因此每次要从一行移动到下一行时,需要将i增加一列的大小,即c。因此,您应该将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));
       }
  }
}

答案 1 :(得分:0)

使用指针访问二维数组:

#define R 2
#define C 2
...
int A[R][C]={1, 2, 3, 4};
for(i=0;i<R;i++)  
  for(j=0;j<C;j++)
    printf("%d ",*(*(A+i)+j));
...