![](/img/trans.png)
[英]Printing a 2D Array using pointers pointing to pointers that point to the array
[英]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.