【问题标题】:Printing 2D Array using pointers in C使用 C 中的指针打印二维数组
【发布时间】:2012-07-15 15:04:30
【问题描述】:
#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?两者都使用相同的逻辑来显示二维数组。有人可以帮忙吗?

【问题讨论】:

  • 首先,把我们的代码变成可读的格式!
  • 请花一点时间来弄清楚如何正确缩进代码。这里没有人愿意阅读那些烂摊子。
  • 如果你太懒了,至少在你的文件上运行indent -kr,然后再复制粘贴它......

标签: c pointers multidimensional-array


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    使用指针访问二维数组:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-14
      • 2020-02-07
      • 2022-11-26
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 2017-02-16
      • 2018-01-04
      相关资源
      最近更新 更多