mdk定义二维数组_C语言零基础入门—数组03

C语言零基础入门—数组-03

本节课的任务是:

  • 讲解二维数组的存储原理。

  • 多维数组的展望。

  • 其他类型数据的数组。


01 - 二维数组的存储原理

上一节我们讲解了二维数组的定义以及使用,但是二维数组的具体内部原理是怎么实现的呢?

类似于一维数组,我们也将从三方面进行讲解。

  • 首先:我们说过数组定义的时候必须指定这个数组的长度,二维数组也不例外,具体内容如下:

    • 二维数组的存储实质上类似于一维数组,虽然我们使用的时候把二维数组当作矩阵进行操作,但是其在内存中的存储:是把矩阵的每一行进行顺序存放的。具体存储如下图:

e684babcfa4e041ca308840a3f1e7c03.png

9be2f7c8b9327a47b23df12ecefa2365.png

  • 紧接着:二维数组申请的连续地址空间的长度是多少呢?

    • 答:二维数组分配的空间的大小是根据这个公式进行分配的:空间大小 = 数组的元素个数 * 数组元素的数据类型长度。

    • 具体解释如下:

391c432fac5014a95b976df90cff1d32.png

  • 最后:二维数组的索引的实现。

    • 具体索引内容看图即可,清晰明了。

e684babcfa4e041ca308840a3f1e7c03.png

203f446e34d2d3f9ca6bb8eaef5594a2.png

注意:我们前面的一维数组可以使用如下方式定义:

  • int A[] = {1,2,3},这种方式虽然没有指明数组的长度,但是可以根据元素的个数自动生成数组的长度。

于是我们就有疑问了?二维数组也可以这样定义吗???我们来试一试吧。

  • 首先说明一点,这个知识点没有实际的意义,只是为了让大家深入理解一下而已。

  • 首先我们按照一维数组的方式定义如下:int A[][]={{1,2,3},{4,5,6},{7,8,9}}

    • 如图,显然不可以这样定义。

e684babcfa4e041ca308840a3f1e7c03.png

90f7c29703585bba0d037bd9dacd3cf0.png

  • 我们再试试看看能不能只输入行这一个参数,即:int A[3][]={{1,2,3},{4,5,6},{7,8,9}}

    • 结果还是不可以。

  • 再试试看看能不能只输入列这一个参数,即:int A[][3]={{1,2,3},{4,5,6},{7,8,9}}

    • 结果是可行的。

e684babcfa4e041ca308840a3f1e7c03.png

fe6405a394fab3df5071fc6e4f9aa0ec.png

这是为什么呢???分析如下:

  • 如果行、列都没有定义的话,它可以根据大括号中还有多少个大括号来确定二维数组的行数,但是列数却无法确定,因此无法预分配内存空间。

  • 因此我们得出一个结论,行数可以由初始值中的内层大括号的个数确定,列数必须指定。

02 - 多维数组的展望

  • 我们发现,把一维数组的每一个数据项更换为一个数据集合,就会变成二维数组。解释见下图:

e684babcfa4e041ca308840a3f1e7c03.png

82616805d925ebc6286700e4ccd7dfb7.png

  • 同样的思路,我们把二维数组的每一个数据项换成一个集合,就可以变成三维数组了。如下图:

e684babcfa4e041ca308840a3f1e7c03.png

2f40e5f3e6796b47bd64a4f3d53e9910.png

  • 更多维度的数组也是如此定义。

注意:其实我们一般最多用到三维数组,甚至二维数组就够用了。所以多维数组可以看作一个扩展知识点,理解即可。

03 - 其他数据类型的数组

这里我们主要说一下,我们上述的例子的数组都是存放的整数,其实在日常生活中我们的数组可以存放各类数据,比如:浮点数,字符等等的数据。

值得一提的是,我们的C语言中没有字符串的数据类型,因此字符串的实现主要是依靠字符数组来实现的,比如:char str[] = "China";。这样就定义了一个字符串。

04 - 结束

由于字符数组比较复杂,再由于字符数组形成的字符串有这一系列的操作,因此我们主要放在下节讲解。

ca3fa907c0f0a9a238b93c98cc3ee2a7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值