深入理解C++指针和数组

1、指针和数组

1、a[2]的本质是:a的内存地址就是a[0]的地址,而[]则是偏移符号,a[2]就是基于a的地址便宜2*4(int)个单位

2、a[2] 的本质就是将a与[2]拆开来解释,所以a就必须代表a[0]的地址,方便编译器识别

3、在求sizeof(a)时,显示的结果是20,所以a虽然是一个a[0]指针,但编译器在用sizeof(a)处理的时候还会将它看作一个数组,数组的大小是5*4=20


2、多维数组(重点)

多维数组在内存中的排列与一维数组相同

重点:

1、多维数组的数组名本质上是一个数组指针(指向数组的指针,本质上是一个指针)(区别于指针数组,指针数组本质上是一个数组,数组的内容放的是指针)

2、数组指针的一个作用就是告诉编译器多少个元素为一组,所以数组指针 int (*ptest)[5]{test}; 中[5]也是很重要的部分,不可或缺,告诉编译器它指向数组是5个为一组的

3、数组指针在+1的时候,加的是数组的大小

4、类比一维数组,test[1][2]是在test[1]的基础上加2*int所对应的值

5、int *ptr=(int*)(&a+1);

这句代码一定要深入理解,分清楚普通指针和数组指针的区别,具体可以参照文章:

http://t.csdn.cn/VDleC


3、 

编译器在求数组大小sizeof(a)时直接用20做了替换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值