00:00
那各位同学现在呢,我们给大家介绍一下指针啊各位。哎,那有时候老师这个指针是个什么意思呢?同学们看到这里就说我们讲的前面的都是基本数据类型,那么我们现在呢,没有讲一个就是引用类型的,或者复杂类型的,我们这边给大家介绍一个指针,那为什么现在要给他介绍这个指针呢?因为本身这个指针就是我们我们现在讲啊,稍微有点早,但是呢,后边很多地方都涉及到指针的概念。所以说没有办法,就只能先提前。给大家讲了,如果我这不讲指针,后面的很多内容讲起来就。非常的不流畅了,就说就感觉少了这个指针,后面讲东西都不太好理解,因此呢,我在这里面呢,先给大家介绍一个指针后面像结构体map。还有还有这个channel这些呢,我们放在后面再去讲啊,指针呢,我还是在这儿就直接给大家介绍了,因为后面很多地方都涉及到指针的概念。
01:02
明白我的意思吧,只要涉及到引用,我们都会可能会用到指针。好,那关于指针呢,我总结了这么四句话,大家把这四句话拿下基本就OK了,我们来看看指针是个什么东西,注意听啊,好,关于这个复杂类型呢,我们就先讲一个指针。好指针,OK。我放到这里来。那么我们先来做一个基本的介绍。基本的介绍总结了这么几句话,第一句话,注意听。对于基本数据类型来说,变量存的就是值,也叫值类型。好,这个呢。这个对于我们来说没有什么难度,但是呢,这次我要画一个内存图了,就是说我们要从内存的角度来分析一下到底是怎么回事。好,我先给大家示一个亿啊,我们来画一个示意图。我们分析一下基本数据类型在内存里面是怎么存在的,内存的布局。
02:02
我们分析一下基本数据类型,在内存的这个布局是什么样子的。或者内存的形式啊好,我写一段代码。好,我因为这是讲的指针嘛,所以说我新建一个文件夹。我新建一个文件夹。在这里啊,点一下新建文件夹,那么我们叫pointer。好,抛。Po。OK,那同样规矩啊,我们新建一个文件叫man.go。专讲指责。好,我在这里呢,还是把这个结构主体,这个结构拿到我们的这个main.go里边去演示一下勾浪中的指针这个类型。对吧,指针类型。
03:00
好,来演示一个案例,首先我们来看一下,首先我们来看一下基本数据类型是什么存在的,因为只有把基本数据类型说清楚了,指针才能把它讲的清楚,讲的明白,我们看一下基本数据类型。基本数据类型。啊,类型在什么呢?在内存的布局。那比方说吧,我们举一个字,最简单的VI int等于十好,这个对我来说特别简单,几乎没有难度,那现在呢,我们看内存布局的话呢,我要把这个放在我们的什么呀。一个这个XR文档里面我们画一下。注意听讲啊,这块很重要了,同学们,这块很重要。那我在这里呢,先把这段代码截过来。没问题吧,好,现在呢,我们这假设有一块内存。这是我们的一块内存空间。这是我们的内存。
04:00
好,如果说我们这定义这个变量I是一个int类型的等于十,那么这个内存在这这个代码他在内存里面是怎么布局的呢?它是这样布局的,注意听啊,这块很重要。他就说这个挨的变量。I这个变量,那么这个ii的变量呢?它直接就和一个内存空间关联起来了。比如说这是我们的内存,存数据的那个空间。这里面呢,就存了一个什么呢,十。理解好,然后呢,我把这个稍微放小一点啊。好,那么这个I这个变量。I这个变量呢,它就直接能够。引用到或者是或这个十这个空间就关联起来了,简单吧。啊,就这样子的啊,那这个既然如此,既然如此,这个就是它的一个内存布局嘛,这个很简单,就一下就看出来,就说那么同学们知道这个内存本身它也是个有一个地址的,能理解我的意思吗?就这个空间本身也有个地址,那怎么拿到这个地址呢,同学们。
05:13
可以这样子取出这个I本身的地址。那么我们来看看啊,就是I。I的地址是多少呢?地址是什么呢?也就是说,我们怎么把I的地址取出来?那说老师说这个什么意思,你在说什么意思啊,就说大家看啊,I的变量它代表了一个。值,可是你这个值他在内存里面分配,那就意味着这个空间本身有个地址,能理解我的意思吧,就好像你租了一个房房子,那么这个房子呢,一定会有个门牌号。那这个门牌号是多少呢?好,我们可以输出来看一下。好是什么可以通过这个取。艾特I,好,我给它输出来。
06:00
好,我们来看看。I的地址。是多少呢?等于。好取。Dollar I。地址符啊,地址符I艾特I,好,我们再运行一下。好,现在呢,我要回到上一集CD点点轴。好,我现在让一下啊,may.go。跑起来看效果。同学们可以看到,I的地址其实就是这一块。好,那就意味着实际上在内存里面它是这么存在的,听我说。相当于说。在这个地方。听我说啊,这儿有块儿地址。好,这个稍微人大啊,就说你这块空间,你这块空间。它本身的地址呢,就是这个地址,而Dollar I呢,它的地址就是它说它们之间就直接指向它了,就说我们的变量I就直接取出来就是这个值,因为它本身地址就是这一块,明白了吗?
07:10
好,这就是我们所说的这个。值类型的在内存里面的一个布局的一个情况好。这是第一个啊,大家看到我这里写了获取变量的地址呢,用艾服务,比如说v number int,它取得number的地址呢,就是这样取,跟我刚才讲的是一样的,我用的是Dollar I取的这个I的地址,对不对?好,这两个呢,这两个的案例我们就合在一起,把它放进去了,能能理解吧。好,这是。这两个案例。好。呃,放到这里来。对吧,那分析他们的基本数据类型布局呢,我这就写了一段代码,还有呢,就是内存图的一个分析。我也把它放在笔里面去。
08:01
在这这段代码的话呢。我们就这样子啊。把代码重新粘一下。重新粘一下对吧,因为后面我们有多了一些代码部分嘛。重新来一下啊,看这里。放到我们的这个图里边去。好的。好,我截取一段代码。截取一段这个图。这群都看懂了啊。这个后面呢,我们会经常提到这个概念。那么我们看第三点,指针又是什么呢?因为我们只有把这个基本数据类型在内存里面的布局搞清楚了,我们才能把指针搞明白,指针是这个意思,同学们看指针类型,指针类型呢,它是变量,存的是一个地址,就是指针这个类型,指针变量,或者这样说吧,指针变量。它存的是一个地址,而这个地址指向的空间存的才是真正的子。你比如说。
09:07
PTR新int等于地址number,那这个呢,这个PTR,注意听这个PTR就是一个指针。它就是指针的名字,它指向一个int。所以前面呢,有一个星号来区分,就是如果没这个星号,那PTR呢,就是一个什么呀。就是一个整数,但是带了一个星号呢。PTR就是一个指针。对不对,宋老师呢,要把这个图再给大家画一下,这个很重要啊,注意听讲。那也就是说,当我们这样做了过后。这个指针它是怎么来玩的呢?举个例子说明。来,同学们,我们就以这个为例来说啊,来举例说明。举例。说明。说明指针。
10:00
在什么呢?在这个内存的布局。内存的布局,或者叫内存的存在形式都可以。那同学们看我这句话啊,我在这写上这么一句话。同学们看效果加一个指针,现在呢,我有个VR。来了,PTR。新int。等于。I,那这句话的意思是什么呢?这句话的意思是什么呢?这句话的意思就是有这么一个啊,下面这句话的意思。下面的我把这个地方换一行,下面的这个VAR的含义是什么?说做出个说明VR。PTR新int等于。I,它表示的含义有这么几点。第一点。PTR是一个指针变量。第一句话听懂了啊,它是个指针变量类型是什么呢?PTR的类型。
11:02
它的类型是新int,那就说明它是指向一个int的一个指针。第三点,大家看到这里。那么这个PTR本身的值是多少呢?PTR。本身的值。它本身的只是。I。好,那有些同学说我不太明白这个意思哦,那我给大家看一下,具体给他打印出来,你看一下啊,注意看。点。Play。好,我们说一下PTR。是多少呢?来把这个值取出来。我们就按V取,就是默认值取,我们把这个PTR直接。打印出来,你们会看到这个PTR,其实就是它的地址,这个值跑一个。注意观察啊,同学们,你看是不是这两个地址是一样的呀,哎,这地方没有说对,应该是F。
12:03
不好意思啊。好,西杠N。再跑一下,这样就看的比较清晰了,再看PDR是零,XC和上面是不一样的。再看是不是一样的。是一样的吧,那也就是说如果这样写的话,我们的内存图就应该怎么画呢?这句话怎么去理解,PTR在内存里面布局呢?好朋友们,我把这个呢再给同学们放到这边。画个图。来。把这句话。放到这边来。好,那么一旦有了下面几句话的话呢,我们内存图又发生了变化,他应该这么去看了,注意听讲啊。相当于说此时此刻我们这有了一个变量叫PTR。它是一个指针变量。它又是什么文字呢?注意听,它本身会存一个地址,注意听讲啊,这块很重要。
13:02
注意听这个地方呢,它本身会指向一个,指向一个空间。就是它本身也有个地址啊,它指向这个空间,而这个空间里面存的是什么呢?存的是她。能理解吗?诶,其实它里面存的这个词啊,就他。而这个呢?在真正的指向了。这块空间。大家看到没有,其实有点像引用是吧,有点像引用,好,为了好看呢,我换成不同的颜色,大家看一下能理解吧?那当然有些同学就说了,说老师既然如此的话,那这个蓝色的区域,它是不是也本身也有一个地址呢?好,如果你想到这去,说明你很聪明。那的的确确啊,PTR它本身也有个地址。他的地址呢,就是这个空间。就是它本身这个空间要存存一个地址吗?那你要存地址的话,它本身也需要一个空间来存这个地址啊。大家能理解吗?
14:01
那也就是说,如果这样打出来的话啊,我们可以看到它本身也有个地址。Fmt。就是说指针本身呢,它本身也有一个弟子。PDF大家看一下啊,我写一句话,PTR的地址,它的地址等于多少呢?V。同样的道理,你也可以用地字符去。好,我们跑一下。最看效果。你看它的地址呢,是0X这个值。对不对,那也就是说相当于什么感觉呢?相当于说它这个地方。也有一个空间。是他。哦,有个弟子是他。也就是说你的这块空间。你的这块空间,它在内存里面,你的是这个这个地址,这个里面存的是什么,是一个地址,其实这个也不难理解,你只是你你原先存的是一个什么呀,你原先存的是一个这样的东西吗?比如说存的是100,存的是200,但是呢,因为PDR是一个指针变量,说说他存的是什么呢?它存的是个地址,其实就这么一点区别没啥。
15:13
这个地址呢,才指向了这个真正的空间。能理解了吗?好,这就是他的一个内存布局,这个很重要啊,同学们不要小看这个图,这个图看起来好像很简单,但是如果说你没有这个一定的经验啊,其实你很很难,就是把这个关系捋清楚,这块希望同学们认真的理解一下,因为后面呢,我们在用指针的时候,只有把这个理解清楚了,好,你就。非常轻松啊,非常轻松,注意听PTR,它的值是这个,它本身的地址呢,是这个和这个I一样,I呢,它的地址。是这个,它的值呢,也只是这个,因为它是什么呢?它是基本数据类型,明白我的意思了吧。好,这个是他在内存里的布局。
16:01
一定要搞得很清楚,我把它呢也放在这里面去。没问题吧,也不是很难,对不对。好,当你明白这个道理过后呢,下面其实就相对来说容易很多了。我把这个图放在我们的笔记中去。下面相对来说就轻松很多啊,我们再看第四一点,注意听获取指针类型,所指向的指呢要用星号。来指向,比如说哇,这个地方写错了啊。这样子的。那么PTR因它怎么取呢?用星号PTR就能取出PTR。PTR指向的这个值,好,我给大家再举个例子。好,这块很重要啊。比方说现在呢,我想通过PTR,比如说我想通过这个PTR把这个100取出来,我怎么取呢。注意听讲。好,注意听我要取出这个值啊t.PTL。
17:08
Intf啊,写个PDR指向的值。指向的值等于多少呢?还是按原格式输出。就这样写心。PTR就可以了。就是说你用新PTR呢,就告诉我们编译器啊,这写错了是吧,哪写错了。哦,这个单词写错了。这个新的PTR就是告诉我们编辑器说,朋友请你取出PTR纸箱的那个值。一旦这个心。你看啊,你原先没有这个信号,它就把这个PTR本身这个D,它存的这个地址取出来,就PTR的哪个呢,这个取出来了。如果你带一个星号呢?这个编译器就很聪明的说,哦,我先取出PTR的。
18:01
他存的那个值就是是用地值,再用星号。去取出它执行的这个值。实际上它第一步取的是什么呢?还是把这个它存的这个地址取出来了,然后心呢,就把这个地址所对应的值给你返回来了,能理解吧,还是比较好理解对不对?好,我们再来看一下走。我们可以看到这个时候取出的是。是。这个十就是你刚才在这里面放的十。好的,所以说这几个关系呢,咱们就搞得比较明白了,好我把这个呢也给同学们写到笔记里面来。并不难,对吧,并不难。好,怎么取的啊,同学们是这样取的。对不对。好,我把它放在笔里面去。好的,那现在呢,我把它放在这里来。
19:01
好,这个图很大,太大了啊。返回去。就这个地方好,最后呢,还有一个小案例,这个案例呢,其实刚才我已经讲过了啊,比如说呃,如果有v number1,如果我让我让你们把这个内存图画出来,你们画的出来吗。现在你们可以把视频停一下,你们可以把这个,还有这段代码的内存图给我画出来,就算你厉害啊,那说明你就听懂了。好,你可以暂停一下视频,可以画一画。好,那现在呢,因为我在讲课,我就不等了,我直接把这个答案公布给大家。来看这。NUMBER1直接number就指向这个地方。好,Y等于99 I指向99,它一个地址,我这地址就是随意随意写的啊,不是一个,呃,不是一个真实的,我就随便写了四个亿,那么PTR新T啊,这个艾特I呢,就相当于说PTR指向了一个。
20:03
这个空间这里面存了一个地址,这个地址呢。就是这个I。这个99空间的地址看到没有,你看这个地址我写的是一样的,这个地址和这个地址我故意写的是一样的,对不对,这说明它指向的这个空间。明白了吧,好,这个呢,大家可以再去领会一下啊,这个案例大家可以领会一下。好的,我把这个呢放这里来。啊,这是个小案例,加深大家的认识。加深大家认识。好,我把它放在里面啊,一个案例在说明啊,一个案例再说明了一下再说明。好的,同学们。我把它。这里,到这里。好,那关于这个指针呢,它的一个呃,基本使用和基本介绍,我们就说说到这里,这里面最关键的啊,同学们最关键的就是一定要把这个图把它搞明白。
21:02
你只要把这个图搞明白了好,那么。后面的事情就比较好解决啊,如果说这会还没搞明白的同学,可以把这个地方再好好的理解一下,理解完了过后再接着往下面继续学习。那关于指针的基本介绍,我们先说到这里。
我来说两句