C语言—利用指针函数输出二维数组任意行列的值

#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();对他取值,取得时指针变量占用的内存空间大小,占用的内存大小是由计算机的位数决定的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值