手记

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

课程内容:

一级指针和一维数组

数组

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人推荐
随时随地看视频
慕课网APP