C语言(二维数组)

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注+收藏,欢迎欢迎~~

💥个人主页:小羊在奋斗

💥所属专栏:C语言
本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为同样是初学者的学友展示一些我的学习过程及心得。文笔、排版拙劣,望见谅。

一、二维数组

1、二维数组的概念

2、二维数组的创建

3、二数组在内存中的存储

二、二维数组的初始化

1、不完全初始化

2、完全初始化

三、二维数组的使用

3、二维数组的下标

3、二维数组的输入和输出

四、变长数组

一、二维数组

1、二维数组的概念

前面学习了一维数组,数组的元素都是内置类型的,如果我们把一维数组作为数组的元素,这时候就是二维数组,二维数组作为数组元素的数组就是三维数组,二维数组以上的数组统称为多维数组。

一维数组是整型元素的数组;而二维数组是一维数组的数组。

2、二维数组的创建

我们该如何创建二维数组呢?

type_arr_name[常量值1] [常量值2];

例如:

int arr[3] [4];

double date[2] [3];

上面我们定义了一个整型二维数组和实型二维数组,对整型二维数组,3表示3行,4表示4列。与一维数组类似,二维数组创建中的行数和列数也必须为整型常量表达式,不能包含变量。

3、二维数组在内存中的存储

可以看到,二维数组在内存中的存储与一维数组是极其类似的。二维数组中的每个元素都是连续存放的,也就是说跨行也是连续存放的。

结合上述我们得出的结论,我们就可以把二维数组抽象成像一维数组一样:

这就对应了我们开始提到的那句话:二维数组是一维数组的数组。

二、二维数组的初始化

1、不完全初始化

不完全初始化时,未赋初值的元素自动取0(对实数是0.0,对字符型是'\0')。

int arr1[3][5] = { 1,2 };

int arr2[2][4] = { 0 };

2、完全初始化

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

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

像上面我们创建的这几个数组,只有一个花括号括起来的叫按元素存储顺序初始化,一个花括号里还有若干花括号的叫按行初始化。按存储顺序对元素全部或部分初始化时,可以根据给定初始化数值的个数,自动确定数组的行数,此时行数可以省略。如:

int arr5[ ][3] = { 1,2,3,4 };

int arr6[2][3] = {{1,2,3}, {4,0,0}};

数组 arr5 和数组 arr6 是等价的。

注意:任何情况下列数都不能省略!

三、二维数组的使用

1、二维数组的下标

其实上面演示的几个二维数组我们已经标明了下标,与一维数组是类似的。以数组 arr4 为例来看,左边竖着的序号是行,上面横着的是列。

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

通过下标,我们就能确定唯一的元素,比如通过 arr4[0][3] 我们就能找到 "4",

2、二维数组的输入和输出

因为二维数组元素有两个下标,一般通过二重循环来操作使用二维数组元素。

cs 复制代码
#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	int arr[3][5] = { 0 };//输入3*5个数
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 5; j++)
		{
			scanf("%d", &arr[i][j]);//注意%d后面不要加空格
		}
	}
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 5; j++)
		{
			printf("%-2d ", arr[i][j]);//这里用%-2d打印是为了格式好看
		}
		printf("\n");//打印完一行后换行
	}
	return 0;
}

四、变长数组

在C语言的c99标准之前,数组在创建的时候,数组大小的指定只能使用常量;在c99之后,C语言中引入了变长数组的概念,使得数组的大小可以使用变量来指定。但遗憾的是,VS2022上不支持变长数组。

int n = 0;

scanf("%d", &n);

int arr[n];

上面示例中,我们定义了一个变长数组 arr ,我们可以输入我们想要的 n 值来指定它的大小。因为它的长度取决于变量 n 的值,编译器没法事先确定,只有在运行时才能知道 n 是多少。

变长数组的基本特性,就是数组长度只有运行时才能确定,所以变长数组不能初始化。它的好处是我们不必在写代码时,随意为数组制定一个估计的长度,程序可以在运行时为数组分配精确的长度。

值得注意的是,变长数组的意思是说数组的大小是可以使用变量来指定,而不是说数组的大小是可变的。数组的大小一旦确定就不能再变化了。

点击跳转主页---> 💥个人主页:小羊在奋斗

相关推荐
2301_8076114918 分钟前
77. 组合
c++·算法·leetcode·深度优先·回溯
安冬的码畜日常35 分钟前
【AI 加持下的 Python 编程实战 2_10】DIY 拓展:从扫雷小游戏开发再探问题分解与 AI 代码调试能力(中)
开发语言·前端·人工智能·ai·扫雷游戏·ai辅助编程·辅助编程
朝阳5811 小时前
Rust项目GPG签名配置指南
开发语言·后端·rust
朝阳5811 小时前
Rust实现高性能目录扫描工具ll的技术解析
开发语言·后端·rust
程高兴1 小时前
基于Matlab的车牌识别系统
开发语言·matlab
YuforiaCode1 小时前
第十三届蓝桥杯 2022 C/C++组 修剪灌木
c语言·c++·蓝桥杯
牛马baby1 小时前
Java高频面试之并发编程-07
java·开发语言·面试
CodeWithMe1 小时前
【C++】STL之deque
开发语言·c++
SsummerC2 小时前
【leetcode100】零钱兑换Ⅱ
数据结构·python·算法·leetcode·动态规划
炯哈哈2 小时前
【上位机——MFC】运行时类信息机制
开发语言·c++·mfc·上位机