快好知 kuaihz

C 指针这样理解更易懂

精华写在前头

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

另一种方式去理解指针

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

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

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

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

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

200:

二级指针的理解

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

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

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

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

所以输出结果就是:

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

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

图解

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

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

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

本站资源来自互联网,仅供学习,如有侵权,请通知删除,敬请谅解!
搜索建议:C 指针这样理解更易懂  易懂  易懂词条  指针  指针词条  理解  理解词条  这样  这样词条  
综合

 腾讯视频qlv格式巧妙转换mp4...

使用过腾讯视频的朋友,都知道腾讯视频单独搞出了QLV格式文件,只能用腾讯视频才能播放,非常麻烦。但我们可以将QLV格式文件转换成MP4格式,这样就可以在其他播放...(展开)