C语言之数组(二)

hello各位!这期我给各位带来了关于二维数组的一些学习分享,欢迎各位批评指正!

1. 二维数组的概念与创建

1.1 二维数组的概念

简单来说,把一维数组作为数组元素的数组就是二维数组。以此类推,把二维数组作为数组元素的数组就是三维数组。往上就是多维数。最常见的还是二维数组。

1.2 二维数组的创建

与一维数组相类似,二维数组创建的方法如下:

type arr_name[常量1][常量2]

其中:type表示数组原数的类型。

           arr_name表示二维数组的名字,由编写者自己取。

           常量1与常量2分别代表二维数组的行和列。

例如:int arr[3][5],  double arr[3][9]。

2. 二维数组的初始化

2.1 完全初始化

与一维数组相似,二维数组的完全初始化就是赋予每个元素准确值。例如以下数组:

通过监视窗口我们发现,完全初始化后每个元素确实赋予了具体值。

这就是完全初始化。

2.2 部分初始化

与一维数组一样,部分初始化就是给二维数组的部分元素赋予具体值。如图所示:

我们不难发现:不完全初始化后,未被赋予具体值的元素默认初始化为0。

2.3 二维数组的省略

我们观察以下示意图:

我们可以得出:二维数组在表示时能省行不能省列!

3. 二维数组的使用

3.1 二维数组的下标

我们规定:二维数组的行和列都是从0开始的,与一维数组相类似。所以,确定了具体的行和列,就确定了唯一的元素。但我们不能超过了数组的范围,否则系统会报错。

例如,我们定义了一个数组如下:

现在我们要访问其中的一个元素arr1[0][0]:

访问成功!结果正确。现在,我们已经学会了二维数组的基本使用方法。

3.2 二维数组的输入和输出

在上一期的讲解中,我们解决了一维数组如何如何改变部分初始化元素的值。现在,我们来个进阶版的,就是把一维数组变成二维数组,相信你们一定会的!

假定一个二维数组int arr[3][5]={0},现在需要我们改变它的初始值。怎么做呢?方法其实很简单我们可以用for的嵌套循环解决:

我们输入结果,再看看编译结果:

嗯,效果还行。我们已经掌握了简单的遍历数组的方法了!

4. 二维数组在内存中的储存

通过上期的学习,我们知道了一维数组在内存中是连续存放的,且相邻元素之间相差4字节。那么我们想想看,二维数组是不是和他一样呢?

同样,我们通过遍历二维数组每个元素的地址来探究这个猜想。且看操作:

是不是很惊喜?通过探究编译结果我们不难看出,每个相邻元素之间的地址都相差4,看来我们的猜想没错。得出结论:二维数组中的每个元素都是连续存放的,一行存完,再存下一行。

5.C99中的变长数组

了解一下:在c99之前,数组大小往往是固定的,这使得数组不够灵活,有时大了浪费空间,小了又不够用。这时,c99给了一个变长数组,允许我们通过使用变量来指定数组的大小。

但我们得注意一下:它并不是想变长就变长,想变短就变短的。而且VS编译器并不支持变长数组,但gcc编译器和一般的刷题网站的在线编译器支持。

下面我们通过一段在gcc编译器上编译代码来了解它的真实面貌:

嗯,是不是感觉这有点东西?以后我们还会见到更多令我们眼前一亮的东西呢!

总结

这一期的内容就分享到这里啦,欢迎各位朋友批评指正,我们下期再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值