簡體   English   中英

使用 C 中的指針打印二維數組

[英]Printing 2D Array using pointers in C

#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? 兩者都使用相同的邏輯來顯示二維數組。 有人可以幫忙嗎?

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

使用指針訪問二維數組:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM