阶梯式深入理解指针(一)

大家好,很多同学和我一样,开发过程中会使用指针,但也只是照猫画虎,具体的理解并不是完全透彻,今天为大家分享一些方法(一)

①首先了解普通变量(以整型变量为例)

int a = 10;

这里的 a 对于计算机内存,是不识别的,a 只是给人用来识别的,真正的计算机识别的是变量a的地址,众所周知,int类型变量为4字节,而每个内存单元是一个字节,这时候,我们将数值10填写到地址里,这里即4个地址(如下图每一个0x加八个数字的形式就代表一个地址),也就是说,占用4个0x加八个数字的形式的东西,就代表我们需要填的值(10)的地址。

0xFFFFFFFF
.....
......
......
......
......

......

0x00000000

②再了解指针变量

int a = 10;

int *pa = &a;

第二行的 * 的作用是说明pa是个指针变量,&为取地址符,我们称pa为“指针pa”

指针pa因为涉及到底层CPU总线地址等,看似高级,但可以理解为他就是int a 的附属品:

假设一下就是int a = 10的地址:

......
......
......
0x00001003
0x00001002
0x00001001
0x00001000
......
.....
.....

新知识点:四个地址要选出一个代表,以表示“背后的家族”,通常选十六进制最小的地址,这里即0x00001000;

所以,我们提及地址0x00001000的时候,即提及上图中,int a的由四个地址组成的地址。

这样我们就描绘一个地址,太方便了。

现在,地址0x00001000中存放的是10,类型是int,至于a,开篇提到,是给人看的,我们暂且可以忽略:

如下图1,一个方块代表了这个方块的地址0x00001000外加这个变量的值10,变量名a在下方标注一,右方是变量类型:

图1

int *pa = &a;的意思是:把a的地址(0x00001000)借用到int * 类型的pa的地址里

仔细观察下方变化,图2↓

图2

一个int *类型的 pa 指针变量偷走了a的地址!!!

不着急,再来看解引用符:*pa(观察*在不同为时候的作用,int * 中的 * 是为了生命pa是一个“指针变量”,下一行开局就 * 加一个变量的作用是,将这个指针变量解引用,然后可以赋值)

 int *pa = &a;

*pa = 15;

那么,在图1中,方块里面紫色位置是给a复制,我们解引用之后,图2的下面紫色方块没有值的地方就是我们要赋值的地方,即解引用的值(*pa),我们在在代码里给*pa赋值15,这样就传递到了0x00001000的地址里,但是这个地址偷来的呀!要还回去,这样就起到了改变a的值的作用。

“偷”这个词呼应开头“是a的附属品”:

指针变量的创建是为了在某些情况下更方便地为变量a赋值,劫走的地址是要还的,而且必须还,其主体还是围绕变量a进行的,所以这样说。

有错误的地方请大佬包涵并指出,下一期,阶梯式深入理解指针(二)

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值