对指针变量取地址_C++指针这样理解更易懂

我想在C/C++的学习中,没有比指针更让人难以理解的了吧。接下来小编就将自己在学习C/C++指针时的一些理解给大家分享一下,希望能对大家有帮助。

精华写在前头

首先将最主要的两点给大家在这里先将一下。在指针里面有两个符号很重要,一个就是“*”号,一个就是“&”。大家记住这两点就行:变量前加“*”就是取值,变量前加“&”就是取地址。

另一种方式去理解指针

我们先来看一下指针变量怎么初始化和赋值:

8e3d76d24863639d1a4f5d8a8718d9c0.png

不知道有多少小伙伴是这种写法:这种写法我是这样理解的‘int’是类型*p把他整个当成变量所以后面*p = b的写法就跟普通int变量赋值是一样的*p = b其实可以看成类似a=b这种赋值过程

其实我个人不怎么喜欢这种写法,我的写法如下:

3150fa37152168a8615b52cc28863c3f.png

大家注意我鼠标选中的那一行,我将int *p 写成了int* p,其实这两种写法用起来是一模一样的,但是我觉得这种写法更容易去理解指针:我将int* 整个当成一个一种类型,就更int、string这种类型是一样的,只不过int* 是指地址類型,而int是整型的变量。现在很好理解了吧。p是一个地址变量,那么初始化我们是不是也应该给他一个地址呢?所以int* p = &a;

然后第13行*p = b ;p是一个地址变量,我前面也讲到过“*”号是取值,就是取p这个地址存的值,p的地址存的值是整型的,b的类型也是整型,符合=号左右两边类型相等原则,可以赋值。运行代码的结果是:

200

二级指针的理解

好,接下来我们呢去复杂情况下运用指针看下我们的理解能不能行的通。好,接下来,更头疼的二级指针来啦!

ba82de4040c57c855690d43fcc4cfb48.png

从第15行看起:我还是用我喜欢的写法去写的。来,我们一起去捋一捋。我又将int** 当成是一个类型(他是“地址的地址”类型),把p2当成是变量。那么第16行,为了让等式左右两边类型相等,p是指向的a的地址对吧,本身p也是一个变量,他本身也有地址,所以将右边也转为int**类型,就是地址的地址类型,怎么做呢?很简单啊,前面讲过啊,“&”代表取地址啊所以p2 = &p;

然后我们看输出项:*p2是什么意思呢?再提一次,前面讲过“*”代表取值,那么*p2代表的意思是取p2指向的地址的值,是什么呢?不就是p的地址吗?

那么**p2呢就很简单了,就是取p的地址指向的值啊。

所以输出结果就是:

f69d170036ecfa65316f21db8ff4cc92.png

其中第一个输出结果由于是地址,地址是系统自动分配的,所以每次运行会不一样!

理解了这些后什么三级、四级也是一样的理解,层层剥开就好了。

图解

给大家一张图,大家去理解吧:

482c622b0ad9ef3aaa3672ef5311bced.png

简单讲一下,程序在运行时碰到int* p会给p开辟一个空间,p会拥有自己的内存地址,但是p本身指向的是变量b所在内存的值也就是200,同理运行到int** p2时也会给p2开辟自己的内存地址,但是他指向的是系统分配给变量p的地址~

【总结一句话给大家:指针变量就是自己住着狗窝却去操心别人家的黄金屋(自己占用很小一块内存,却能指挥很大一块内存)】

好啦,就讲这么多,不知道是将各位弄的更糊涂了还是豁然开朗了呢?希望对大家有帮助哦!同时也希望大家能给小编点赞加关注!!!!!小编后续会分享更多自己掌握的知识给大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值