为了账号安全,请及时绑定邮箱和手机立即绑定

【备战春招】第二十天一级指针和一维数组

标签:
嵌入式

课程内容:

一级指针和一维数组

数组

int a[5];

(1)数组名代表数组首元素的地址.

a <=>&a[0]<=>)0xdff30

指针保存数组

int a[5];

数组共有5个元素,分别是a[0]~a[4];

a[0] <====>int

&a[0]<====>int *

=====================================

int a[5];

int *p = &a[0];

而a和&a[0]是等价的,故我们也可以如下写法.

int *p = a;

一级指针遍历一维数组

int buf[5] = {10,20,30,40,50};

int *p = &buf[0]; //int *p = buf;

buf[0]<===>int

buf<=>&buf[0]<=>int ; 结论: buf[i]<===>(buf + i)<=>*(p + i)<=>p[i]

一级指针和一维数组的区别

(1)一级指针主要保存地址,占4bytes,而数组有多个

内存空间用来存放不同的数据,空间较大。

p的类型 int *

a的类型 int [5]

(2)数组名是一个地址常量,表示数组首元素的地址,常量不能更改.

int a[5] = {10,20,30,40,50};

int *p = a;

p++;//true;

a++; //error, a为地址常量,是数组第一个元素的地址,系统自动分配。

// 由于是一个常量,用户不能更改.

结论:数组赋值给指针,数组是常量不能更改,指针是变量可以更改

数组a指针p,可以p++不可以a++

关系与结论

a ,&a[0] 和 &a 之间的关系

a<===>&a[0], a[0]是int类型,占一个小int单元的带下,占4bytes.

&a中,代表了int [5]整个大单元的大小。

a+1 ,偏移4bytes大小

&a + 1,偏移20bytes大小

结论

int a[5];

总结:

a <===>&a[0]

a + 1

&a[0] + 1

&a + 1

a[0]为int类型,故&a[0] + 1一次偏移一个int类型的大小,4 bytes.

a为int [5]类型,故&a + 1 一次偏移一个int [5]类型的大小,20 bytes.

笔试题:

char a[5] = {10,20,31,32,40};

*(((char *)(&a + 1)) - 3) - 2 ====>输出多少? //29

学习收获:

通过本章学习了解到了 指针首地址的保存形式,数组和指针直接的对等关系

还有a和&a单元的大小

截图打卡:

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消