00:00
那前面呢,我们讲了这五个知识点,那这五个知识点呢,要想大家有一个更清晰的认识呢,哎,那你一定得基于这个内存结构,这也是咱们为什么后边讲面向对象的时候呢,要给大家去讲内存结构啊,因为说了内存啊,你知道原来是这样子的。然后你再写代码呢,你就清楚了,就是胸中有图。啊,脑中有图也行啊,就是你脑子里边存着这个图,你去写代码,它就不容易出错啊,怎么变你都知道啊,就是那个样子的,那你要是光硬生生的看这个代码,你说是几就是几,那都。感觉很难理解。是吧,诶,所以我们这儿呢,要想理解的好,就得看这个内存结构啊,那么关于二维数组呢,我们也来画一画它的这个结构。诶,下边其实我也画了一些了,大家下来呢,你也可以看看啊,咱们这儿呢,先给大家再画一个。那这块画的话呢,我们就得是举例子,相关的这个代码结构,针对这个代码呢,我们去给他画啊,我们比如说呢,先拿一个整形的二维的。
01:00
Are?哎,等于又一个。印的行。哎,我这呢,就写成这种形式了啊。这呢,我写一个。四这个呢,没有负。在接下来A1,我这呢写个一。诶,给它等于new一个int型。这哪写一个。啊,123。这是一个二。哎,这我写一个五,嗯,五有点长了,短点吧。是吧?行,然后再接下来我A21。我写一个叫一。嗯,一一换一个吧,二。这个呢,我赋一个值叫30。先看一下这个代码,它的一个内存中的结构啊呃,这呢,我是拿这个string来举例子,那不是string的话呢,其他类型其实也类似。
02:02
啊,也类似。首先。先有一个栈结构。站结构,然后再来一个胖一点的堆结构。至于底层啊。接着我们这个在密方法中写的这个变量,生命的变量都是局部变量啊,叫A21。在这块我们有一个A。接着只要是new的结构都在对空间中去开放啊,这个这个开辟啊。呃,又一个int型的,这是个二维数组,前面呢是个四,其实呢,就是相当于咱们一开始呢,只是先造了一个长度是四的一个数组。这个我们。竖着这样去放啊。好,这个数字呢,我就放到这儿了。
03:00
那么这个数组自然而然的它就会有一个首地的值。跟咱们说的那个意味,当时那会儿一样。这个呢,我们来表示一下它的地址值0X,比如1234。将这个地址值付给我们占空间的A210X1234。通过这个地址值,我们占空间的变量叫做A2,一,就可以指向咱们对空间中造好的这个数组了。我就能够找过来。啊,还没完事啊。那我这个时候呢,这个位置呢,是没有写的。意味着我们这时候呢,这里边儿的每一项呢,其实都没有初始化过,所以此时呢,这里边是多少。这里边是多少,就取决于你这个元素的类型吧。这个元素什么类型?什么类型?说印的型的不对。哎,应该叫int型的一维数组吧。
04:01
每一个元素的类型。对吧。哎,对,因为每一个都是一维的,咱们不是合一起的话,这不才叫二维吗。哎,既然你是个一维数组了,数组是引用类型,没有负过值是不是知道啊。这呢,就是四个闹。那么到此为止,咱们第一行代码呢,搞定了。就长这个样子啊。那么第一行搞定以后,然后接下来我们A21通过这个变量,我找到它的第二元素,就找到它了,我现在给它呢进行了初始化。New了一个结构,只要是new的,在我们的堆空间中去开辟长度的是三是吧,对元素也给了啊。
05:02
那这个呢,我们放到这儿。放到上面一点吧,这样。那既然你用完这个数字以后,紧接着它就一定会有个手地值了。这个地址呢,我们给它标识出来。0X比7788。把这个地址值赋给了我们,这个叫A21,就是这个位置。所以这个闹呢,就这时候就不是闹了。哎,它呢,这个值目前呢,就是我们的DNX7788。那通过这个7788这个值,我们就能够,诶指向了咱们对空严重你心造的这个数组了。还没完事啊,这个数组的话呢,问此时这个元素什么类型。对,这时候呢,它是阴的行了。哎,这是int类型,既然你是个int型的,哎,咱们要说的详细点的话呢,是不是都先有个零的值啊。
06:03
然后的话。然后的话呢,我们这儿呢,又显示的给他付了一个123,相当于你把这个默认的这个零呢都给干掉了。哎,换成了你现在显示负的123。诶,这123就附上了,那么到此为止,咱们第二行代码呢,就搞定了。我们相当于是通过A21,咱们要找这个角标是一的话呢,就能找到它角标一,再去找下边的就能找到这几个。嗯,再接着A12找到这个元素,把这个呢,我们也扭了一下,同样的道理。把它呢给它删掉哈,呃,新造的这个呢,是长度是四,那咱们造出来。
07:03
哎,长度是四。倒出来了,倒出来以后,紧接着它就一定会有个手地址。首地址附上值零,X。呃,6677,比如说啊。把这个6677呢,给到我们这个AR2这个一二这个元素啊。0X6677。通过这个6677。我又能够找到堆空间中你新开辟的这个一位数组。找到了,找到以后,我们这时候呢,是通过这种叫静态初始,呃,动态初始化了哈,这个时候呢,就没复过值了。对,就是四个零。这个呢,到底是零还是是别的,就取我们这个in的这个类型了。你这int就是四个零,我要是不尔呢。是个force呗。
08:00
这种啊。把这个我们调一下这个啊。啊,四个零,那那么第三行代码呢,就到此为止。哎,到此为止,然后接下来我们呢,A21呢,找第二个第二行吧,算诶第一个第二个第二行找到它,它呢,再去找它下边的这个角标为一的,相当于就找到这个元素了。这个元素呢,给它复制为30。30。那么我们第四行代码就也搞定了。哎,就是我这儿呢,Int举例子,大家呢,你可以换成布尔,可以换成string哎。都可以,然后呢,具体的该负是是什么值,这个咱们在上面第五个点,这不都已经说到了。哎,就是这种情况的啊,然后当你这行代码结束以后,如果呢,你是在没方法中定义的没方法,那这义都是大括号就出去了啊一出去以后呢,我们这个里边在占空间中,大家定义这个A21呢。
09:05
是不是就要弹弹出站了。因为你要超出作用域,它就要出站了啊,他一出站这个指针就没有了。指针没有的话呢,这个结构发现在堆空间中,在占空间中没有指针指向你了,它是不是就要被回收了。他要回收完以后呢,这两个是不是就没有指针指过来了。那这两个呢,回头也就被回收了,所以我们这个整体结构呢,最后就都哎没有了啊,这就咱们这个二维数组的内存解析。这个大家呢,建议哈,呃,这个。晚上的时候,或者你自己自习的时候呢,你看一下我后边呢,这不还给了几个图,这是它对应的这个代码,那你自己根据这个代码呢,你自己拿出这个纸来画一画。你要都能画出来是正确的,哎,那你再回过去看我们这个代码呢,你会非常的清楚。啊,你要单纯的广看代码呢,你会觉得诶怎么一会这个一会那个,其实都是基于我们这个内存结构啊,你要清楚的就都能搞得定了,就啊。
10:06
就是这个情况啊。
我来说两句