二维数组和多维数组的本质及寻址方式

二维数组和多维数组的本质及寻址方式

     二维数组和多维数组的本质还是一维数组,一维数组是一个特殊的一维数组。数组的数组就是多维数组,这个数组的元素不是基本数据类型,而是数组。

     int ary[5],float ary[5],double ary[5],这种数组称为基本类型数组。整形可以当元素,通过类比,数组也可以当元素。

     把一维数组作为元素的数组,称为二维数组。把二维数组作为元素的数组,称为三维数组。元素是几维元素,就是几维加一的数组,元素是 n 维数组,那就是 n+1 维数组。

     数组的数组,在生活中经常会遇到。例如学校考试之后,会记录学生的分数。放全班同学的分数用一维数组就可以。

     如果,学校同一年级,有 5 个班,这时,用一维数组是不够的,要用到二维数组,相当于 5 个一维数组构成了二维数组。

在这里插入图片描述
     再举一个例子。小学用的作文本,一个作文单元格,视为一个元素,每一行构成了单元格的数组,一行有 20 个单元格,构成的数组是 ary[20]。

     一页有 15 行,基本元素为行,定义为一页,换算成单元格,构成的数组是 ary[20][10] ,二维数组。

      一本有 50 页,基本元素为页,定义为一个本,换算成单元格,ary[50][20][10] ,三维数组。

     以此类推……

在这里插入图片描述
     最后举一个例子。更像多维数组结构的,是小学笔盒中的钢尺,它的 1 小格是 1 毫米,10 毫米是 1 厘米,10 厘米是 1 分米,10 分米是 1 米。

     尺子的排列结构和数组是一样的,顺序排列。毫米在顺序排列,相对于厘米而言,也在顺序排列,相对于分米而言,还在顺序排列。

     20 公分的钢尺,里面包含有两个元素,两个分米。只看分米,相当于1维数组。

     再看分米,1 分米相当于 10 厘米,分米是一个数组,厘米也是一个数组。

     再看厘米,1 厘米相当于 10 毫米。单一看,分米是一个数组,厘米是一个数组,毫米仍是一个数组。换而言之,20 公分的钢尺,也可称之为 200 毫米的钢尺。

在这里插入图片描述
     通过写程序,调试,观察二维数组在内存中的分布

#include <stdio.h>

int main()
{
   
  int ary[2][3] = {
   
    {
   1, 2, 3},  // ary[0]
    {
   4, 5, 6}   // ary[1]
  };
}

     按 F10 ,进入单步调试,第一个元素 1, 2, 3 成功写入了内存

在这里插入图片描述
     再按 F10,第二个元素 4, 5, 6 也成功写入了内存。通过观察框,可以看出,这两个元素相邻且连续,类型是一样的,都是放三个整形的数组。所以说,多维数组还是数组,满足数组的一切特性,以及寻址公式。

在这里插入图片描述

使用多维数组的注意点

      在设计上一般不会用到很多维的数组,在设计中如果出现,使用三维数组以上时,往往要考虑设计上出现了问题。

     一维表示线性,二维表示平面,三维表示立体。如果在程序中,根据业务要求,处理线性,平面,立体是可以理解的。

     四维表示时间,五维几乎 99% 的都不理解是做什么的。所以当发现必须要用三维数组以上解决问题时,先冷静一下,重新思考,肯定有更好的方法解决这个问题。

二维数组和三维数组寻址公式

二维数组寻址公式

     某类型二维数组,type ary[N][M] 。因为二维数组的元素是一维数组。根据数组这篇文章,讲解的一维数组寻址公式,类比得出。ary[x] 的地址是 (int)ary + sizeof(type[M])*x ,经过计算后,得到其元素一维数组的首地址。

      编写程序,求 ary[1] 的地址,通过调试和汇编代码验证公式。

#include <stdio.h>

int main()
{
   
  int ary[2][3] = {
   
    {
   1, 2, 3},  // ary[0]
    {
   4, 
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值