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

【备战春招】第二十一天指针的设计规则

标签:
C 嵌入式

课程内容:

指针的设计规则

指针的设计规则

本质

所有的指针都是用来保存地址的,只不过因为保存地址的数据类型不同,从而

拥有多种指类型.

规则

一级指针变量是用来保存普通变量的地址.

二级指针变量是用来保存一级指针变量本身自己的地址.

三级指针变量是用来保存二级指针变量本身自己的地址.

示例

以二级指针为例:

定义方式 如下:

数据类型 ** 变量名;

int a = 10;

int *p = &a;

int **q = &p;

指针的使用结论

在32bit的系统中,所有的指针变量都是4bytes

sizeof(指针变量)的大小

在32bit的系统中,多级指针(二级和二级以上)在移动的每次移动都是4bytes. 因为一个指针大小是4bytes

深入理解

一级指针 char q每次移动是去掉和q剩余类型大小也就是char普通类型大小为1bytes

二级指针或者多级指针 char *_q去掉_和q剩余类型是char *

char *是指针类型,指针类型大小都是4bytes

二级指针和一维数组的转换

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

int *p = a;

int **q = &p; //q <===>&p *q <===>*(&p) *q<===>p

而根据一维数组得出结论:

a[i] <===>_(a + i)<===>_(p + i)<===>p[i]

且当前 *q<===>p,故

*(p + i)<===>p[i]<===>_(_q + i) <===>(*q)[i]

指针数组

指针数组引言

5个int类型变量组成的数组,我们叫做整型数组. 例如:int a[5]

5个char类型变量组成的数组,我们叫做字符数组. 例如: char b[5]

5个 指针类型变量组成的数组,我们叫做指针数组.

int a[5]; //sizeof(a)

//a[0]~a[4] <===>int

//a<===>&a[0]

指针数组含义

它本质是一个数组,只不过该数组由多个指针来构成,所以,我们叫做指针数组。

​ 每个指针中存放的都是地址值.定义一个指针数组等价于定义了多个指针变量。

指针数组定义方式

数据类型 *变量名[元素个数];

例如: int *p[5];

(1)数组中的元素: p[0] p[1] p[2] p[3] p[4]

(2)数组中每个元素的类型: int *

(3)整个数组的大小: sizeof§ ===>20bytes

(4)一个元素的大小: sizeof(p[0]) ===>4bttes

(5)元素的个数: sizeof§ / sizeof(p[0])

(6)数组的首地址: p<===>&p[0]

指针数组工程用法

int a = 10,b = 20,c = 30;

int *p_array[] = {&a,&b,&c,NULL};

int i = 0;

for(i = 0;p_array[i] != NULL;i++)

{

printf("%p\n",p_array[i])

}

二级指针保存指针数组地址

示例用法

char a = 10,b = 20,c = 30;

char *array[] = {&a,&b,&c,NULL};

array <====>&array[0];

array[0]的类型是char *

&array[0]应该定义char ** 的类型来保存。

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

char a = 10,b = 20,c = 30;

char *array[] = {&a,&b,&c,NULL};

//char **q = &array[0];

char **q = array; //q<===>array;

结论

针数组的首地址应该定义二级指针变量来保存

一维数组的特性

int a[5] = {10,20,30,40,50}; //整型数组

int *p = a;

a[i]<===>*(a + i)<===>*(p + i)<==>p[i]

指针数组

案例

char a = 10,b = 20,c = 30;

char *array[] = {&a,&b,&c,NULL};

char **q = array; //q<===>array

数组的特点

获取地址的方法

array[i]<====>*(array + i)<===>*(q + i) <===>q[i]

获取数据的方法

*array[i]<====>*(*(array + i))<===>*(*(q + i)) <===>*q[i]

学习收获:

学习到了指针的设计规则,对指针和指针数组有了深入的了解

尤其是查看指针地址和指针数据这块,也更清晰了

截图打卡:

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消