左左右学堂 · 课程目录

第27期 一节课讲明白C语言中的指针(下①)

观看B站原视频 · 文稿与高清画面

hello,小伙伴们,大家好。这里是左左右。通过前面几期视频的学习。大家心中可能都有这样一个疑惑。就是总感觉指针有一种多此一举的感觉。那么,这期视频我们就通过指针应用的实际案例来帮大家解解心中的疑惑。假如现在有这样一种需求:需要通过调用函数将两个整形变量中的值互换。这里首先定义两个变量。

视频画面 00:33.8
视频画面 00:33.8 · 1080P 原图 · 查看对应视频
视频画面 05:39.6
视频画面 05:39.6 · 1080P 原图 · 查看对应视频

接着,我们来定义一个函数。那么,如何将两个变量中的值互换呢?这就好比两个杯中分别装有牛奶和可乐。那么,如何将牛奶和可乐互换呢?这时我们需要找到一个空杯子,将牛奶杯中的牛奶倒入空杯。接着,将可乐杯中的可乐倒入原来装牛奶的杯中。

最后,将空杯中的牛奶倒入原来装可乐的杯中。这样就完成了牛奶与可乐的互换了。所以,照猫画虎来写一下这个函数。首先,定义一个变量名为空的变量,将变量a中的值赋值到这个变量。接着,将变量b中的值赋值到变量a。

最后,将空变量中的值赋值到变量b。这样就实现了变量a和b中值的互换。我们调用写好的函数,调试输出看一下结果。这时输出的结果和我们预想的并不一样。变量x和y中值未能实现互换。这是为什么呢?带着这样的疑问重新来写一下刚才的函数。我们将之前的变量a和b改为指针p1和p2。接着,将指针中地址对应的值进行互换。

视频画面 02:01.2
视频画面 02:01.2 · 1080P 原图 · 查看对应视频

这时我们再次调用写好的函数,调试输出看一下结果。这时输出的结果和我们预想的一模一样。变量x和y中值实现互换。那么,这两个函数到底有什么样本质的区别呢?通过前面几期指针的学习,我想大家已经有了一个大概的思路了。接着,我们通过大家熟悉的动画来分析一下这两个函数的。

视频画面 03:28.6
视频画面 03:28.6 · 1080P 原图 · 查看对应视频

首先,在内存中存入5和10这两个值。这里我们将之前的动画做了简化。接着,调用swap这个函数。这里看上去虽然传入的是x,y这两个变量。其实,在c语言中,这时传入的只是xy这两个变量中的值。c语言会新建两个变量来存放5和10这两个值。这时互换的只是新建的这两个变量中的值。

与x,y这两个变量无关,而且随着函数调用的结束。这两个新建的变量也会消失。这两个变量就是我们常说的局部变量。空口无凭。我们来验证一下,首先将变量x和y的地址打印输出一下。接着,把swap函数中的a和b的地址打印输出来看一下。这时上下两行的输出结果是不一样的,这也就验证了调用swap这个函数传入的参数是变量中的值。

如果传入是变量x和y本身,那么,上下两行的输出结果就会一模一样的。接下来分析一下带指针的这个函数。调用这个函数是将x的地址传入到指针p1。y的地址传入到指针p2。接着,我们通过解引用p1和p2。直接操作变量xy中的值,也就是我们常说的通过庙来找和尚。这时我们不止通过庙找到了和尚,还把庙里的和尚给换了。

随着函数调用的结束虽然指针p1和p2也会消失。但这时指针已经完成 了他们的使命。已经把变量x和y中值进行了互换。是不是通过这个案例,我们对指针的应用有了更加深入的了解,希望大家有所收获?

好的,今天的视频就到这里了。您的关注,点赞和收藏是我持续更新下去的最大动力。我们下期见。