00:00
那今天我们就开始去学这个指针了,那指针都是什么指针,这指向都是什么?内存地址是不是,那所以说我们先了解一下什么叫内存,那这里面可以给大家画图啊,那画图去辅助大家理解一下,哎呀打错了。诶打开了,那比如说我这里面有一个变量。这个变量什么变量叫int类型的A等于十。A等于A等于十。那我是将这个什么,将这个十存到这个变量A里面来,是不是,那对应的是不是也会存到我们内存中去啊,那我们可以通过什么,通过一个是。PTF,然后是百分号PP,然后斜杠N,然后是逗号一个按的。A。通过什么,通过是百万P来找到这个我对应的内存地址是不是,那我之前之前咱们讲的都是什么,之前通过。都是通过变量名,通过变量名。
01:01
来访问内存空间的。啊,我们平时都是什么,都是通过这个是A,通过A来去操作我们这程序,其实这里面存的是什么?存在我们内存中,那这是一个十,假如说这是一个IP地址是一个什么,内存地址是0SFF0,零,那这是一个地址,我们一个验证类型占几个地址啊。四个地址是不是啊,一个类型占四个类型的空间大小,平时咱们说说哪个地址说的都是这个是int类型的首地址,知道吧,这是个首地址。首地址,根据这个地址我也能怎么的也能找到这块内存空间是不是啊,那这个地址是,比如说这里面我写一下是这个是0X。0SFF01啊,不是零零啊,Sorry,是零零,那我根据这个零零也能对应的找到这块的东西,也能怎么着也能把这个时这个具体的一个值取出来,那应该怎么取呢?就是通过指针的方式来去取,那看一下指针它应该怎么操作啊,指针是不是应该接收是一个地址啊,不再是个变量了是不是。
02:13
指针,那就是指针,我先写汉字啊。指针,那指向的是一个地址,那比如说我定义一个变量啊,指针它也是一种变量,知道吧,它也是用来接收这个一个一个具体的一个值的,那比如说这个变量什么变量叫P。让P等于谁啊,等于这个地址,这个地址是零。SFF01这个,呃,不是0000这个地址。但是我们想获取的时候,是不是得这么的,得通过按获取吧,啊,指针得是要这么写啊。指针,然后是P等于。And a。是这样情况下,就怎么着就能获取我这个地址了,获取我这个地址之后,我再打印的时候,比如说PTF。
03:01
百分号P,然后是斜杠N,然后逗号一个P。这地址吧。啊,骚扰骚扰,这这里面这这这里面什么,这里面是。啊,这应该是D,我这里面在怎么的,这是要想打印什么,打印这个地址情况下,我这里面应该是百方D了,因为这里面这个P存在,不是这应该不是D啊,是X啊,因为这是个16进制的是不是啊,为什选16进制啊,我这里面要打印什么,打印P对应的这个值这个什么,这个是不是应该值了,在这来说是A的地址,P的值是不是,所以说这里面对应的都是什么,都是我们这个地址都是对应的,对应这内这块内存区域是不是,之前给大家举个例子,比如说咱们现在所在的位置是什么,所在位置是这个是。叫修正大厦吧,是不是啊,这是他的名字,是不是名字。名字叫修正大厦。啊,然后怎么的,然后这里面咱们还有另外一个找他的东西叫地址,这地址叫什么叫北京。
04:08
北青路多少多少号是吧,是比如说这个32号,那这是个什么,这是个地址,那如果说你跟司一个司机朋友说我要去秀荣大厦,或者跟司机朋友说我要去,呃,北青路32号是不是都能找到咱们这个具体的一个地点呢?那我能不能进到我教室里面来啊,是不是这属于这个值了吧,是不是,那这里面两种方式都可以啊,把这个怎么切下来。拿过来,这是两种方式。那我们看一下应该去如何去操作这块内容呢?看一下啊,在这里面新建一下。文件右击添加一个新建项。把这删掉吧,右击选择删除。零二。指针的定义。
05:03
我。使用。Int类型的A等于十,这是一个变量,整形的变量是不是啊,我得通过指针,那指针应该怎么去写呢?就是这个是。指针,指针用原本的数据类型,前面加一个,不是后面加一个新运型,比如说我这个。这个变量是是个整形变量,我对应它来指,对不是对应它来的,找到指针的情况应该是个什么整形指针吧,整形指针就写个int类型,后面加个星,这就代表什么呀?指针PP,然后是等于and a,那其实来说这应该怎么,这俩放在一起是什么类型,叫int星类型的知道吧,这属于一个指针类型,然后这个P呢,是一个什么指针类型的一个变量。P用来指向于什么一个变量的地址,那这里面写啊指针,嗯。
06:02
矩阵是一种。数据类型,然后是P呢,是指针类型。变量。用来指向一个。变量的。例值,那这个P的值是不是可以和A的值一样?比如说A等于十,我再让A等于。20我给谁了?给这个A是不是重新赋值了,那我让这个什么int类型的呃星。等于and b,假如还有个变量B啊,比如说int类型的B。等于100。等于B,那我是不是怎么的,是不是给这个。Sorry啊,这应该这么写啊。我是不是应该给什么给这个P又重新赋值了吧,它是个变量,那变量它就满足所有变量的什么要求,就是怎么可以被赋值,可以进行计算,是不是这样啊,这个加减计算是不是可以啊啊乘数计算也行,但是这个对指针乘数计算是没有意义的,是不是啊,这是我们知道的东西啊,那好,那我们去打印一下这个值啊,比如说P,呃,PF。
07:17
百分号P,然后是斜杠N,然后逗号and b啊,为啥打印and b啊?因为这是P的地址,呃,就是怎么样把这个B的地址给批了,我还要打印什么,打印这个是呃是X啊。X,然后这里面是P啊,看这俩是否相等啊,啊前面有空,呃,前面有零,你先不用管啊,看一下它是否相等,调试开始执行。看下这俩值是不是相等的,这个零你先不用管啊,是不是115FC2C啊,是不是它俩相等的,那这个是P的什么啊,P的值是不是啊,这是什么B的地址,因为我这里面做的操作什么,把这个B的地址给这个P了,是不是这个操作啊。
08:03
那然后我们再看一下什么,我们既然已经找到这个这个B对应的这个地址是谁啊,是这个P,那我能不能根据这个地址去改变这个B里面这个值呢?那我们看一下啊,是。通过指针修改。变量的值。我们P是个变量星P啊,Sorry啊,把这个拿过来。星期就指向于一个值了,谁的值啊,是B的值,那这里面注意这个问题啊,是可以通过值修改变量的值加上一个什么呀,在这个变量,这是个变量前面加个星就指向于。B的这个值,那我是不是可以把这个星P当做一个B去看待啊,给它重新赋值,赋值为这个是200,那我们再打印一下这个值啊,PTF先打谁啊?先打一下这个斜杠N逗号一个B,那这里面是不是B的啊,那同样可以是谁的啊是。
09:04
星P的值,百分号D,斜杠N,然后是逗号一个星P,注意一下是星P啊,不是PP是个地值,星P才是个值,那我们再打一下,看一下是什么情况,调试开始执行。啊,这两个这两个是不是都是地址啊,这两个都是值都是什么,都是这个是200啊,这两种方式是不是都可以访问的,那那我们继续再看一下下一个内容。啊,都写在一起吧,这也没多少啊是。那因为什么?因为这个的是一种什么数据类型,是不是数据类型在内存中占的都是什么,都是占一个大小的字节,是不?那我们看一下这个什么,这个是。In的星类型在我们中占字节大小多少?那应该怎么求啊?Size of是吧?Size of求出来这个是。呃,是指针类型在内存中的大小。
10:03
那那这里面我直接打印了啊print,然后是括号,括起来是百分号D,因为这是set off的这个求来日值吧,斜杠N,然后逗号一个是size of谁呀。PP是什么指针类型的嘛,是不是这是个变量,是不是可以求回来就相当于A是不是一个道理啊啊,同样还有另外一种表现方式是什么?是这个是。In星啊,这个in星你可以加空格,你可以不用加空格,不会影响你程序的运行啊,或者是怎么写的,比如说这个里面我看一下啊,是int空格星或者是in。啊P这里都一样的,知道吧,啊,他们都代表相同内容啊。好,选择调试开始执行。这里面大小都是多大,四个字节,那我们可以说一下是整呃是整形类型的这个指针大小是不是或者印的星,它的大小是什么,四个字节大小,但有个前提是什么。
11:05
在32位。啊,操作系统中。是。四个字节大小,那这个怎么这个可以给大家再通俗一点讲啊,我们这里面内存地址都是怎么的相连的有编号,比如说你4G的情况,是不是每个都是代表一个字节大小啊,帮帮连接起来,是不是每一个都会分配唯一一个编号,而且他们这个编号不会重重复的是不是,那在这个图上继续给大家画一下啊,是什么样的啊。假如这一溜啊,特别长特别长,都是什么,都是我们这个内存啊细的啊。都是我们内存每一个都怎么样,都会有一个这个唯一的这个编号,而且这个编号不会发生怎么样重复。那你想想,既然都有一个实体的一个物理的编号,就是在我们内存中都是一个什么物理存在,呃,不是物理存在的一个东西吧,所以说它的编号从哪开始的,从零开始的,一直到哪啊,因为我们这是什么,这是它的是。
12:08
整形大小都是一个,按照说说一下啊是。按照T。是按照。UN按照无符号int类型。喂。每一个。物理内存分配编号。啊,分配编号。物理内存。分配编号从零开始到哪结束啊?无负号的内心最去大,取值范围多大呀?零二的32的32次幂减一是不是啊,这个这个值大小是不是就是多大呀,是六。多大呀?啊,这个比较大啊,就是那那这里面啊,那它具体能是一个几G的值呢?就咱们说几G的值,那比如说什么,比如说我这个是计算机,然后如果是属性。
13:14
啊,我这个是64位操系统,那这里面这个8G内存都能用得上是不是,那如果是你32位操作系统情况下,那这里面也就是三点多个G吧,是不是不到四个G啊啊如果是这里面你装8G内存的情况下,它后面有括号,括号显什么显示可用内存为三点几个G,就是后面这个怎么着,因为已经超出了int类型的整型这个值是不是啊,所以说那块那个内存。分配不了什么呀,编号了知道吧,所以说那个就怎么就空出来,你用用不了知道吗?因为没有编号,所以说没办法操作啊,是这个情况。就是所以说你如果要装一个大点内存情况下,一定把你的操作系统怎么着,那是64位,那64位情况下就是多少啊就是。二十六十四次方减一,那你这是怎么的?16G啊,什么64G啊,128G啊,这只是内存啊,都能用得上,知道吧啊。
14:06
应该特别大的一个内存了啊,就是不像咱们这么小了。那所以说这里面我定义一个int类型,它都是不是定义一个什么,定义一个这个int性类型,他在我们内存存了几个。四个字节的大小,是不是因为这里面什么存的都是编号,是不是那存的编号。那我们再换几种数据类型给大家看一下啊,比如说这是学校是。呃,是这要是int星啊,等于百分号D,然后再复制一下啊,再换几种数据类型,咱们看一下啊是。大兴。然后是。Short星,然后是浪星,嗯,然后是。呃,Lo星是不是数组,那后面讲内容先不要不要掺进来啊,是dou。B,那这里面我们是不是得顺时都变都变了,BUB这次都怎么着,这次都不变啊,我告诉你。
15:04
Call。和其他的可能怎么的不太一样啊。好,我们求出来这几个值,看一下这几这几个值都为什么样的值,调试开始执行。看一下。都是四是不是啊,这个你先记住啊,是在什么呀,在32位错误系统中啊,然后是什么是。所有。所有指针大小。都是四个字节大小,知道吧,这为什么呢?再给大家画图啊,把这次先保存一下,这是变量的存变量内存存储格式啊。零一。是笔记。班长认真记录啊,这是第一个,叫什么呢?叫。
16:01
变量存储格式,变量的存储格式。好,那新建一个,新建一个什么呀,还用一个变量,这假如说是我们一个变量,它是不是在我们内存中存着一个什么呀,存着一个地址是不是,那我们这个什么指针类型,它也是个什么呀,也是个变量,它是不是也得在我们中存着呀。啊,那我们看一下画画一个这样的东西啊,这个不一样大就不一样大了啊,无所谓,你看一下也可以啊,比如说这里面什么,这里面是一个int类型的A等于十,还是同样道理,它有个地址编号,地址编号为什么是0XFF00。为什么用这个每次都用这个零零呢?后面会给大家说啊,这里面存的东西是什么是值,这个十是个什么值是不是,那这里面再定一下这什么,这是个地址int类型的。星P等于星P等于N的A。那这个PG是不是把这个东西要存在这儿啊,存的是什么?存的是一个地址,谁的地址啊,A的地址,就是把这个东西拿过来存到哪啊,存到这里面去,那就是写一下啊是。
17:06
0XF fo0,零是这样的东西。那对应的这个这个什么P是不是也有地址啊啊,这个P地址,比如说这里面隔了四个是0SFF,零四,它这个地址想要表示情况,就用几级之人表示了,二级人表示了,在咱们这块这个这个内容先不说啊,咱后面要讲就是它也有个地址,这个地址怎么保存,咱们先不说啊,这是个问号,画人丑。好像也没好到哪去啊,那我们怎么着,我们拿到这个地址了之后,可以在这个地址前面加上一个星。叫什么叫取地址符号就能怎么的,就能找到这块对应的这个内存空间了,能明白吗?啊,这个图你要能看明白就可以啊,十对应的是一个值,然后它有个地址在这里面P,它存在是一个什么,是一个值知道吧,就是内存存的都是值,但这个值是一个其他人的内存地址,如果你加上星的情况下就是什么呀。
18:04
取啥了,取值了啊,在内存地在这个指针前面加个星,就是取值,就能找到它对应这个内存地址中的这个值,然后去改变情况下,比如说我前面加个星去改变这个东西等于等于100情况是不是改变是这块内存空间呢?就是这个道理啊。啊,这是我们这个int类型对应的,那好,那我们再来什么,再来一个其他的啊,比如说再来一个差类型的啊,如果你看懂两个其他的都懂啊,比如说这叫B等于一个单引号的A。他在我那中存的是什么样的格式啊?啊,一个字符啊,这不是字符串啊,这个比较小,存在是一个什么,一个字写单元是不是啊,一个字写单元,比如说这里面写的什么A啊,当然这个里面对应的是不是它也有什么,也有个地址是不是啊,但对应这里面in的类型有几个地址啊。四个地址,但我们存存几个地址啊,一个地址存的都是首地址啊,因为这个差类型就一个地址,所以说它就存什么,存了一个其他地型啊,比如叫0FF f10啊幺零。
19:06
那我对应要写情况,这里面写什么,写差星类型的。七一等于。And的B啊,那我这个印的星类型存的是不是也是这个地址啊,然后把这个地址拿过来啊看一下。这里面存的也是要存什么这个地址,把这个地址拿到过来,放到这里面去写一下啊是。0XF f14啊,不能是幺零啊,因为幺零啊,不是是是幺零是幺零啊,Sorry sorry,是幺零是不是,那对应的情况下,我要想改变这个值情况,是不是也加氢就可以了,那因为这里面无论是什么类型的,这写项是。无论是什么类型的指针。
20:02
囤的都是。地址,这个地址都是什么,无符号int类型呢?是不是,所以说无符号in类型是多大呀。四个字的大小,所以说任何的指针类型,它的大小也都是什么呀,四个字的大小,明白了吧,这块啊,内存地址存的都是内存地址啊,内存地址都是无符号整形。的,所以。都是。四个字节四个字节。大小,这是大家注意注意的问题啊。那这块明白了吗。啊,明白了之后,那好,那我们在这里面给大家去演示一下啊。内存这些大小,那比如说我把什么把这个,呃,我现在是叉六叉八六十三十二位的,我换成64位给大家看一下啊啊点这个64给大家换成64位了,调试开始执行。
21:04
看一下如果变成64位情况下,这里面就全变成几了。全变成八个字节,为什么?因为这个在64位操作系统中,所有无符号in的类型就是八个字节大小,所以说这里面全变成多少了啊,八个了,那这里面真正让大家记住这句话就应该是怎么是。指针类型大小在32位操作系统中是四个字节大小,在64位操作系统中是八个字节大小,这个是咱们这个讲义中应该有这句话吧,我找一下啊,看一下能不能找对应的这句话。没有。有应该有指令大小啊,有了吧,是不是这句话啊,记住这句话一定要这个,你需要把这句话去理解一下啊,啊前面这个内容咱们讲完,咱先把这个告一段落,保存一下。
我来说两句