首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一口气吃下数组的存储方式

一口气吃下数组的存储方式

作者头像
谭庆波
发布2018-12-06 15:23:06
9910
发布2018-12-06 15:23:06
举报
文章被收录于专栏:轮子工厂轮子工厂

Long long ago,我们讲到了数组《聊一聊数组背后的那点事》,这个已经是迈进指针的第一步了,主要的内容是一维数组,今天我们将讲述二维数组。当结束了今天的内容之后就会开启指针部分的内容。指针可以说是C语言的灵魂啦,如果真的想搞定指针,一定要好好学习本节课的内容,并且好好回顾一下上节课的内容哦~

1

二维数组的定义

定义二维数组的方法跟一位数组相似,使用方括号指定每个维度的元素个数:

其实可以很形象的将二维数组想象成一个平面,如下所示分别对应着 5*5,4*5 和 6*3 大小的二维数组。

但是这只是一种想象,因为实际上二维数组在内存中是以线性的方法进行存储的,如下图为一个 int b[4][5]; 大小的数组在内存中存储示意图

如上图所示,其中的 b[0] 表示 int b[4][5]; 中的第一行中的元素,同理b[1], b[2], b[3] 表示第二行,第三行和第四行中的元素。在上图中的第二行可以看到 b[0] 中具体存储的是第一行中的 5 个元素(b[0][0] 到 b[0][4]),b[1] 里面所储存的就是 b[1][0] 到 b[1][4] 5 个元素。可以看到,我们虽然将数组定义为了二维的形式,但是在内存中仍然是以线性的形式进行存储。

到目前已经讲了一维数组和二维数组在内存中是如何存储的了,那三维数组或者多维数组呢?思考一下,期待在留言中看到你的答案哦~

2

二维数组的初始化

二维数组主要提供了以下几种初始化的方式

  • 由于二维数组在内存中是线性存放的,因此可以将所有的数据写在一个花括号内,即
  • 为了更直观地表示元素的分布,可以用大括号将每一行的元素括起来,即

对于上面代码中的两种方式,我们更推荐第二种方式。因为第二种方式更加直接,虽然占用空间变大了,但是也更容易被理解。

  • 二维数组也可以仅对部分元素赋初值

上面的这段代码将对数组中第每一行的第一个元素进行赋值,其余的部分将自动补零。

  • 如果希望整个二维数组初始化为0,那么直接在大括号里写一个0即可:
  • C99同样增加了一种新特性:指定初始化的元素。这样就可以只对数组中的某些指定元素进行初始化赋值,而未被赋值的元素自动初始化为0:
  • 二维数组的初始化也能偷懒,让编译器根据元素的数量计算数组的长度。但只有第1维的元素个数可以不写,其他维度必须写上:

2

二维数组的访问

二维数组的访问的具体方式如下

跟访问一维数组相似,同样是使用下标访问数组中的元素。同样需要注意下标的取值范围,以防止数组的越界访问。比如 int a[3][4],其“行下标”的取值范围是 0~2,“列下标”的取值范围是 0~3,超出任何一个下标的访问都会造成越界。

今天的内容就先到这里啦,接下来的文章很多都是烧脑文章哦,什么指向指针的指针,数组指针与指针数组的区别,数组名和指针……各种奇奇怪怪像绕口令一样的问题会接踵而至,我准备好了,你呢~

3

参考

[1] “小甲鱼” 视频课程《带你学C带你飞》【第一季】P20

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 轮子工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档