#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数组。有人可以帮忙吗?
答案 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));
...