笔记:C语言多维数组与指针研究

 个人学习笔记,也只有自己能看懂。

// 多维数组的指针探究
#include<stdio.h>
int main()
{
	int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
	int (*p1)[4]=&a[0];/*尝试过,无法用二级指针变量指向二维数组名,即 int **p1=a,
                       这么写编译会报错,提示无法编译。必须定义指向定长的一维数组的指针变量才行。*/
						
	printf("%d\n",p1);//第一个第一维元素的地址,即a[0][]的地址。
	printf("%d\n",p1+1);//第二个第一维元素的地址,即a[1][]的地址。
						//这里1的步长是第一维元素所占存储空间,即4个int,16个字节。
	printf("%d\n",*(p1)[0]);//输出a[0][0]的值。C语言不能输出一个数字数组的值。
	//p1是指向数组a的第一维元素的地址的指针变量,那么*p1即a的第一个第一维元素。
	//加个下标,就可以表示数组a的第二维元素。
	//**p1、**(p1+1)这样写法也可以,因为p1是指向特定长度数组的指针变量。
	
	
	int *p2=&a[0][0];//使指针变量p2指向第一个第二维元素,即a[0][0]。
	printf("%d\n",p2);//第一个第二维元素的地址,即a[0][0]的地址
	printf("%d\n",p2+1);//第二个第二维元素的地址,即a[0][1]的地址。
						//步长是第二维元素所占空间,这里是一个int,即4个字节
	printf("%d\n",*p2);//a[0][0]的地址。
	
	
	printf("%d\n",a);//第一个第一维元素首地址
	printf("%d\n",*(a+1));//第二个第一维元素首地址,a+1加的是第一维元素所占的存储空间,
						//在这里是4个int,16字节,跟p1一样。这里是a[1][]的首地址
	printf("%d\n",**a);//只有对数组名,才能使用**a这种写法,
						//可以输出这个数组的第一个最高维元素,这里是a[0][0]
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值