C语言多维数组与指针的关系

C语言多维数组与指针的关系

int arr[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,8}};
	printf("int arr[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,8}}\n");
	puts("");
	printf("arr : %p\n",arr);
	printf("*arr : %p\n",*arr);
	printf("arr[0] : %p\n",arr[0]);
	printf("*arr[0] : %d\n",*arr[0]);
	printf("arr[0][0] : %d\n",arr[0][0]);
	printf("&arr[0][0] : %p\n",&arr[0][0]);

运行结果
在这里插入图片描述

  • 由此看出,数组名arr是一个二级指针,arr[0]是一个一级指针;
	int arr[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,8}};
	printf("int arr[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,8}}\n");
	puts("");
	printf("arr : %p\n",arr);
	printf("*arr+1 : %p\n",*arr+1);
	printf("*(arr+1) : %p\n",*(arr+1));

在这里插入图片描述

  • 由此看出,*arr+1指针的变化是由一个int的大小进行移动的;
  • 而*(arr+1)指针的变化是由四个int的大小进行移动的;
  • 所以*arr和arr分别代表行指针和列指针;
	int arr[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,8}};
	printf("int arr[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,8}}\n");
	puts("");
	printf("arr : %p\n",arr);
	printf("arr+1 : %p\n",arr+1);
	printf("arr+2 : %p\n",arr+2);
	printf("&arr[2][3] : %p\n",&arr[2][3]);
	printf("arr[2][3] : %d\n",arr[2][3]);
	printf("&arr+1 : %p\n",&arr+1);

在这里插入图片描述

  • 由此可以看出&arr代表的是整个数组的首地址,地址名加一后,直接跳出整个数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值