打工族学习C语言之数组(二维数组)

今天继续复习数组的内容,一维数组说过了,接下来是二维数组!

一、 ⼆维数组定义

1.1 ⼆维数组的概念

上次学习的数组被称为⼀维数组,数组的元素都是“内置类型”的,如果我们把⼀维数组做为数组的元素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称为多维数组。

  • 注:数据类型主要分为内置类型和自定义类型两大类,其中内置类型又分为整形(int)、浮点型(float)、字符型(char)和布尔类型(bool)四种;自定义类型又分为数组(array)、结构体(struct)、枚举(enumeration)和联合体(union)四种。

  • 二维数组具象化如下图所示:

在这里插入图片描述

1.2 ⼆维数组的创建

1 type arr_name[常量值1][常量值2]2
3 例如:
4 int arr[3][5];
5 double data[2][8];

解释:上述代码中出现的信息
• 3表⽰数组有3⾏
• 5表⽰每⼀⾏有5个元素
• int 表⽰数组的每个元素是整型类型
• arr 是数组名,可以根据⾃⼰的需要指定名字
(具象化举例见上图二维数组)data数组意思基本⼀致。

1.3 ⼆维数组的初始化

  • 同一维数组一样二维数组创建时也要初始化!
1.3.1 不完全初始化
int arr1[3][5] = {1,2};

int arr2[3][5] = {0};
  • 数组中存放的内容见下图:
    在这里插入图片描述
    不完全初始化时,数组剩余的元素空间默认为0,这点同一维数组一样,一维数组没提到,这里补充一下!
1.3.2 完全初始化
int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
//另一种写法
int arr3[3][5] = {{1,2,3,4,5} ,{2,3,4,5,6} ,{3,4,5,6,7}};

在这里插入图片描述

1.3.3 按照行初始化
int arr4[3][5] = {{1,2},{3,4},{5,6}};

在这里插入图片描述

1.3.4 初始化时可省略行不能省略列
int arr5[][5] = {1,2,3};

int arr6[][5] = {1,2,3.4.5.6.7};

int arr7[][5] = {{1,2},{3,4},{5,6}};

在这里插入图片描述

-注:对于二维数组则可以看成是一维数组的嵌套,一维数组里的每个元素,又都是一个数组(包含几个元素),这个数组就是二维数组。会有些绕,慢慢理解!

二、 ⼆维数组的使用

2.1 ⼆维数组的下标

当我们掌握了⼆维数组的创建和初始化,那我们怎么使⽤⼆维数组呢?
其实⼆维数组访问也是使⽤下标的形式的,⼆维数组是有⾏和列的,只要锁定了⾏和列就能唯⼀锁定
数组中的⼀个元素。

二维数组的下标 行,列 都是从 0 开始的
在这里插入图片描述

图中最左侧绿⾊的数字表⽰⾏号,第⼀⾏蓝⾊的数字表⽰列号,都是从0开始的,⽐如,我们说:第2
⾏,第4列,快速就能定位出7。

#include <stdio.h>
int main()
{
	 int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
	 printf("%d\n", arr[2][4]);
	 return 0;
}

在这里插入图片描述

2.2 ⼆维数组的输入输出

二维数组的输入输出同一维数组的方法是一样的,同样采用FOR循环,只不过需要多加一个FOR循环,去把行,列的个数进行一一遍历。
下面直接上代码和运算结果,不再过多介绍。

#include <stdio.h>
int main()
{
	int arr[3][5] = {0};
	int i = 0;//遍历⾏
	//输⼊
	printf("输入数据:\n");
	for (i = 0; i < 3; i++) //产⽣⾏号
	{
		int j = 0;
		for (j = 0; j < 5; j++) //产⽣列号
		{
			scanf("%d",&arr[i][j]); //输⼊数据
		}
	}
	//输出
	printf("输出数据:\n");
	for (i = 0; i < 3; i++) //产⽣⾏号
	{
		int j = 0;
		for (j = 0; j < 5; j++) //产⽣列号
		{
			printf("%d ", arr[i][j]); //输出数据
		}
		printf("\n");
	}
	return 0;
}
  • 这里代码把输入输出写到了一起,运行结果如下:

在这里插入图片描述

三、 ⼆维数组在内存中的存储

像⼀维数组⼀样,我们如果想研究⼆维数组在内存中的存储⽅式,我们也是可以打印出数组所有元素
的地址的。代码如下:

#include <stdio.h>
int main()
{
	int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
	int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 5; j++)
		{
			printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
		}
	}
	return 0;
}

在这里插入图片描述

从输出的结果来看,每⼀⾏内部的每个元素都是相邻的,地址之间相差4个字节,跨⾏位置处的两个元素(如:arr[0][4]和arr[1][0])之间也是差4个字节,所以⼆维数组中的每个元素都是连续存放的。
如下图所⽰:

在这里插入图片描述

数组在C语言中还是使用很频繁的,学好数组还是很重要的!以上是我对数组的理解,如有错误欢迎指正!!!

对于多维数组(三维、四维不常使用)最常使用的就是二维数组,主要以二维数组为主进行介绍,下次更新函数内容!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值