00:00
那么我们把指针的基本啊使用给大家介绍,以后呢,我们就来做几个,呃,练习题啊,我们来看第一个案例演示,写一个程序获取一个int变量number的地址并显示在终端,这对你来说没有难度,对吧?第二个将number的地址附给指针PTR。那么并通过PTR去修改numbers,好,我们把这个案例呢给大家做一下。其实这个题跟前面呢,呃,有很多相似的地方。对吧,有很多相似的地方,来走一个案例。好写到这里来啊,它有两个要求,第一个要求呢,对吧,就是可以把地址输出来。好,同样我们把这个题对不对就写到这里来,Homework,我直接呢。就在。练习里面写吧,啊练习里面写好,这个是以前的那个me对不对,妹好,我呢先把这个在这里面再写第二个。
01:04
练习二。新建一个文件,Exe。零二。好的,那因为这里面不能有两个主函数是不是,所以说我先把这个主函数先注销了。没问题吧?我先把这个注销,我在这里面写就可以了,那同学们前面这个打包还是照样打包me,然后呢,该引入一个。For包bank me包起来。好,他说获取到这个整数number的地址,这个没没难度,Number in等于我就随便给一个值,比如说是九,好把地址打印出来就可以了,Print。好,我们说number的地址ad等于。什么呢,说出来。At符号。Number啊,这个时候我们把它值输出来就可以了,V。
02:03
好,这样子就做完了,第一个题咱们就做完了,来回到上面把它打印出来CD到,诶,我们看这里面有个错误啊,看错误在哪里。看错在哪里?他说重新声明了一个什么东西,对不对,好,这样子吧,我们。我们把这个都注销吧,干脆都注销啊,这是个空文件就完了。保存一下。空文件啊好,这就没毛病了,诶这为什么还有错呢。空文件为什么还有问题啊?看一下。此文件存在一个问题。啊,那就干脆这样子吧,这个文件我们先我们先这样子,随便写一点东西,屏幕。啊,主包里边儿咱们写一点。这个别的函数。
03:00
呃,先暂时把它先。先暂时的把它先删除吧。诶,这个为什么这样子哈,我们来看看为什么。好,我们看一下吧,那干脆这样子,我们把这个这边的注释打开,再看看有没有问题,好打开过后呢,相当于这里没有函数嘛,没有函数好这样好像没有报错了,对吧?没报错好我们来把这个运行一下。好,CD到我们ex ec这边去,我们go让哪一个函数呢?我们的这个ex e02跑下。它这边有个主函数是不是输出来,他说地址啊是这个,那同样我们这地方呢,应该是格式化的。再重新跑一下走。地址呢,输出来是这样的一个值,0X什么什么好,这个答案就有了。这是我们的第一个题就做完了,第二个题呢,它要求什么呀?他要求定义一个指针来修改它的指,这个很简单,VR,比如说PTR。
04:01
新定址对吧,然后呢,我把这个值给它PTR等于什么呢?等于地址number。好,给了这就是负值嘛,这是声明这是负值,然后呢,我通过PTR去修改这个值,比如说PTR等于我去访问到这个值,给它负一个值,比如说负一个十,那这个时候我们来观察一下,同学们注意听。此时此刻,我们先问大家,大家觉得这个number这个值变成多少了?Number这个值现在是多少呢?Number等于好说出来。输出好,因为我用这个新PTR访问到这个空间呢,然后呢,给它改成十,所以说大家想一想,这个number现在是十还是九呢。想想原先这个图。想想这个图是不是因为我这PTR指向这个number的这个,呃,这个地址,然后呢,其实PTR访问的就是这个number的空间,因此我这去修改。
05:08
这里修改时。会导致什么呢?Number的值变化。没问题吧,变化。好,那么我们来输出一下,看看是不是变成了多少,它应该变成了十。我们可以输出看到的的确确变成十了,对吧,好,这地方没有一个换行。T-N。徐刚恩,换一行再看一下。跑起来。再看是不是斜杠N呢,这样子是不是有十啊,那为什么是这样子的呢?如果我们画一个图的话,其实大家可以很轻松的就把它拿下来,那为了让大家记得再清楚一点呢,我这次再画最后一次图啊,再画最后一次图。好,那么呃,理解一下这个原因是怎么回事。
06:01
好,我把刚才这段代码呢,先拿到这边来。拿到我们的Excel表里面来,对吧,帮助同学们理解。来再画一次啊,以后我们就不这样,再以后我们就不会再这样画了啊好,首先呢,各位同学,它第一步。第一步,这有一个number。对不对,Number呢,它指向了一个空间。指向了一个空间,这个空间存的值是。多少呢?好,这个值就是九。是这意思吧?就是九说说这个NUMBER1就跟它关联起来了。关联起来了,好这个这个背景图啊,很讨厌换一个别的颜色,换一个浅的颜色啊,那大家看,紧接着呢,我PTR指向这个地址,好同样的道理,这时。当我们的代码执行完这句话的时候,注意听,当我们代码执行完这句话的时候。
07:02
执行完PTR等于at number的时候,那我们在内存里面它是什么一个情况呢?朋友们它这样一个情况,就说有一个PTR这个指针变量。它指向了一个空间。好,这个空间里面有一个地址。我这里就不写,那么写的多了啊,这个地址大家看到,呃,从这地方可以看出来这个地址的,这个地址呢,就是这个。好,他这边存了一个地址。对吧,这个地址呢,实际上就是上面的这个数据存放的这个地方的一个地址,也就是说其实呢。这个地方有一个地址。就是这个九所在的位置有个地址,因此呢,它就指向了他。
08:02
对吧,这个是不是能理解吧,那就说PTR指向它本身呢,有个地址,它是跟这个关联的。它是跟这个关联的,那么它的地址呢,又指向它,所以说到了这一步,新PTR它会怎么操作呢?PTR实际上是这个地址。他用心一取,相当于说就就指向这里了。明白吧,就说新PTR就代表操作到或者取到他所指向的这个值,然后呢,你给他来了一个十。就改了,这个时候你再输出number的值,那number现在显然就变成十了,而不是九,就这个道理好不好?这个呢,我就画了一次图啊,呃,这次就是最后一次,以后我就不会再这样画这么详细了,希望大家能够把这个再仔细的理解一下好,关于这段代码,关于这个案例呢,我们就讲到这里。好,我把这个图啊,把把代码和图呢,一并给同学们放到笔记里面去,加深大家的理解。
09:06
好,整个先放好啊,同学们注意听。放好以后呢,各位朋友,现在呢,我们接着看。这儿还有三个课堂练习题,我们一起来做一下。第一个题大家看,大家觉得这个题对的还是错的,这有一个INT300,然后呢,我把这个值交给这个PTR,大家觉得对还是不对。各位同学,这个这个错误是错的。注意啊,这个地方是错误。错,为什么错误呢?大家想一想,为什么错误?错误的原因是不是就是因为你把一个值交给了一个指针变量,这是不定,因为指针变量它是要接受一个什么呀,它是要接收一个地址的,除非你这样写。才是对的,如果你直接给一个A,这是错的。
10:01
好,这个就平行到这里,第二个题,同学们看第二个题呢,大家看到这里啊,他说有一个。Int这个变量为A,然后呢,这有一个指针,这个指针变量呢,它是指向一个FLOAT32的一个指针,这时他把一个A的地址,就是这个整数的地址交给了一个FLOAT32的地址,这样允许吗?告诉大家,这个也是错的。这样操作也是错的啊。因为我们在给一个指针的时候呢,它也有类型。就说。指向三二的这个指针变量,它能够接收的地址呢,必须是三二的。你不能是一个int的。明白,所以这个也是错误的。也是类型不匹配。类型,类型不匹配。好,这个呢,同学们可以在代码里面去试一下,好,我们再看第三题。第三题,看这。
11:01
这个地方呢,他说把一个300给了一个A,这没问题,紧接着呢,他把这个400给了一个B,这也没问题,好,这个地方注意看这里,他说把。A的地址交给了PTR,这个应该是正确的,因为这是int,这也是int,所以说这两个是匹配的,因为我把一个int的地址交给了一个指向int的指针变量,这个没毛病,这个也是OK的。紧接着呢,它通过这个新PTR仿它新PTR就是取到它纸箱的这个值改成100,注意这个时候改成100过后,同学们应该马上敏锐的感觉到A也改成了100。能体会到吗?因为你新PTR跟刚才那个是一样道理,他们是指向同一个地方的,对吧,所以说这个地方A也变成了。这个100,因为你原先是300被他改了。紧接着呢,他又让这个PTR指向了,注意看这里。
12:01
这是地址啊,他把这个B的地址交给了PTR,各位同学请思考。也就这个时候,PTR它指向谁了呢?它的它里面存的这个地址就是B。这个变量的地址,所以它已经不再指向A了啊,于是乎这个也是OK的,这个是没毛病的,为什么呢?因为。B也是一个int类型的,所以它的地址呢,是一个int类型的地址,交给PTR没毛病,接着看这里,这时呢,他把200交给他去取得它之前的值,然后呢,负了一个200,同学们想一想,这个时候。A有变化没有,A没有任何变化,B变了,B变成多少呢?B变成了200。你B原先是400,它变成200,所以说最后这个输出的结果,A等于多少,B等于多少,新PTR等于多少呢?新PD是不是把它值取出来呀。啊,你看这新PD,那就是这个值取出来。
13:02
那取出来,大家想一想,这个值应该是多少?好,我告诉大家,第一个A应该等于100。没问题,B应该等于200没问题,第三个新PTR等于多少呢?因为他现在指向的是这个B的这个空间,所以说这个也等于200。最后结果是A等于100 B等于200,新PTR等于200。好,如果你分析出来是这个,那么恭喜你,这个就答对了啊,如果你分析的不是这个,你自己再去想一想。好,这是我们的案例演示和课堂练习,后面呢,还有我把这个笔记给同学们补一补啊,这有一个课堂练习对不对。课堂练习。课堂练习啊,指针的课堂练习。指针的课堂练习,我把这个课堂练习的内容呢,也放在咱们的笔记里面去。那同学们想一想啊,如果你整个思考的结果跟老师不一样,那你想一想到底是哪个地方出了问题了,好。
14:05
把它再画一下,这是一个错误。这也是错误,最后这个结果大家看是这个结果啊。OK,我把这个整体的。课程练习先放到这里了。然后呢,还有关于指针使用的几个细节,给大家聊一下指针的使用细节。或者叫注意事项吧,再给大家提一下,那么指针的使用细节呢,我觉得主要有两点大家要注意一下,第一个直类型。所有的指类型呢,都对应有指针类型。他怎么做呢,是心。星号数据类型。就这就是这种。指类型所对应的指针类型。你比如说int int对应的指针类型呢,就是星号int。FLOAT32对应的指针类型呢,就是星号FLOAT32这个写错了啊,少了一个,以此类推,比如说你有一个FLOAT64,它对应的指针类型就应该是新FLOAT64位64啊,所以它它的指针类型就是在原先的它的这个类型里面前面加个星号就行了。
15:15
明白这意思吧,这点大家前面在使用的时候应该有所体会。那问题来了,苏老师,那纸类型到底包括哪些呢?除了我们前面学的基本数据类型,比如说int系列的系列的布尔斯顿之外。那么在这一个go里面呢,还有数组和结构体也是结构体,就是它的英文是structure,也是什么呢。也是这个之类型的。那关于数组和结构体,我们后面还会详讲,也就是说现在大家知道我们学的基本数据类型都是这类型,除此之外呢,还有数组以及结构体也是。之类。那直类型的时候,它就要满足我们前面所说的一种用法啊,前面我讲的值类型是怎么在内存里面怎么布局的。
16:07
对不对。好,所以说这块呢,大家要有一个清晰的认识。那我把这个指针细节呢,放到我们的笔记里面去。好的。指针的细节。我总结了大概有两点对不对,一个一。好,值类型对应的指针类型,它应该是怎么写的,第二个呢,就是指类型有哪些注意啊,就是值类型都有对应的指针类型,它标出来。那么形式为星号数据类型。没毛病吧,好,那后面呢,我还举了一些案例,大家可以以此类推。另外呢,子类型包括哪些?这个必须要清楚啊,在面试的时候,别人可能会问,诶,问你一下,在勾浪里面子类型有哪些?你要立马一把说。把它马上打出来。就是这些。
17:01
没毛病吧,这个大家一定要记住啊,还有像结构体也是属于直类型的。那同学们那关于指针的这这个细节,还有它的呃,两个练习题呢,我们就给大家讲到这里,那先同学们掌握到这个程度啊,同学们你掌握到老师讲这个程度呢,基本上就可以去正确的使用指针了。在后面我们在呃去使用指针的时候,需要注意的地方,老师还会特别的再提出来。那关于指针的这块内容呢?我们就先给同学们介绍这些。
我来说两句