#include <stdio.h>
void initArray(int (*p)[5]){
/*
此处想法:想把行和列通过传递过来的二维数组指针都求出来再用for循环遍历
如果想用这种方法求出行和列只能将数组当成参数传递
int list=sizeof(p[0])/sizeof(p[0][0]);//5
printf("%d \n",sizeof(p[0]));//输出的是20
printf("%d \n",sizeof(p));//输出的是8
//注意这里的sizeof(p);是把p当指针变量来取占用的空间而不是当作二维数组来取,指针变量在64位的计算机中占用8个字节
int row =sizeof(p)/sizeof(int);//2
printf("%d %d",list,row);
*/
//行数其实是固定的5,我们求出列数就行
int list=sizeof(p[0])/sizeof(p[0][0]);
for(int i=0;i<5;i++){
for(int j=0;j<list;j++){
printf("%d ",p[i][j]);
}
printf("\n");
}
}
int demo(int (*p)[5],int row,int list){
int i;
i=*(*(p+row)+list);
return i;
}
int main(){
int arr[5][5]={{11,22,33,44,55},{12,23,34,45,56},{13,24,35,46,57},{14,25,36,47,58},{15,26,37,48,59}};
int (*p)[5]=arr;
initArray(p);
//printf("%d \n",sizeof(arr));输出的是100,是整个二维数组所占的空间字符大小
int row =0;
int list=0;
printf("你想要第几行第几列的数\n");
scanf("%d%d",&row,&list);
printf("第%d行第%d列的值是%d",row,list,demo(p,row-1,list-1));
return 0;
}
这里大家可以直接参考正确的地方,出错的地方纯纯个人想法
可以注意的一点是当p是指针变量时sizeof();对他取值,取得时指针变量占用的内存空间大小,占用的内存大小是由计算机的位数决定的