🎊 【C语言】二维数组(详解)

【C语言】二维数组(详解)

正文开始——

前言

前面我们深入学习了一维数组的相关知识,现在我们开始二维数组的学习之旅吧!

1. 二维数组的创建 1.1 二维数组的概念 前面学习的数组被称为一维数组,数组的元素都是内置类型的,如果我们把一维数组作为数组的元素,这就是二维数组,二维数组作为数组元素的数组被称为三维数组,把二维数组以上的数组统称为多维数组。

1.2 二维数组的创建 定义二维数组的语法如下:

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

2

3 例如:

4 int arr [3][6];

5 double data [5][6];

3表示数组有3行 6表示数组有6列int 表示数组中每个元素都是 int 类型arr 是数组名,可以根据自己的需要指定名字 2. 二维数组的初始化 在创建变量或数组的时候,给定一些初始值,被称为 初始化。

二维数组的初始化与一维数组一样,也是用大括号初始化的。

2.1 不完全初始化 1 int arr1 [3][4] = {1,2};

2 int arr2 [3][5] = {0};

arr1数组

2.2 完全初始化 1 int arr [3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

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

2.4 初始化时能省略行,但不能省略列 1 int arr [][5] = { 1, 2, 3 };

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

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

3. 二维数组的使用 3.1 二维数组下标 二维数组的访问也是使用下标的形式,二维数组是有行和列的,只要锁定了行和列就能唯一锁定数组中的一个元素。

C语言规定,二维数组的行和列都是从0开始的。如下所示:

1 int arr[3][5]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};

arr数组

第一列表示行号,第一行表示列数,第二行第四列,锁定15。

3.2 二维数组的输入与输出 我们已经知道了如何访问二维数组的单个元素,那我们如何访问整个二维数组呢?

我们只要有规律的产生行和列的数字就可以了,以上面 arr 数组为例,行的范围是0~2,列的范围是0~4,所以我们可以借助循环生成所有的下标。

4. 二维数组在内存中的存储 像一维数组一样,我们想研究二维数组在内存中的存储方式,我们也可以打印出数组所有元素的地址。

如下:

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

5. C99中的变长数组 在C99标准之前,C语言在创建数组的时候,数组大小的指定只能使用常量、常量表达式,或者如果我们初始化数据的话,可以省略数组大小。

如:

1 int arr1 [10];

2 int arr2 [3+5];

3 int arr3 [] = { 1, 2, 3 };

这样的语法限制,让我们创建数组的时候不够灵活,有时候数组大了浪费空间,数组小了又不够用。

C99中给一个变长数组的新特性,允许我们可以使用变量指定数组大小。如:

1 int n = 0;

2 int arr[n];

上面的代码中,数组 arr 就是变长数组,因为它的长度取决于变量 n 的值,编译器没法实现确定,只能运行时才能知道 n 是多少。

【重点】

变长数组的根本特征,就是数组的长度只有运行时才能确定,所以变长数组不能初始化。它的长度是程序员不必在开发时,随意为数组指定一个估计的长度,程序可以在运行时为数组分配精确的长度。有一个比较迷惑的点,变长数组的意思是数组的大小可以使用变量来指定的,在程序运行时,根据变量的大小来指定数组的元素个数,而不是说数组的大小是可变的。数组的大小一旦确定就不能再改变了。

遗憾的是,在VS2022上,虽然支持大部分C99的语法,但是不支持C99中的变长数组,没法测试。

6. 数组练习 题目:多个字符从两端移动,向中间汇聚

二维数组的学习就结束了,下来我们要好好练练习题才能对二维数组的掌握及其运用更加熟练。

完——

🎯 相关推荐

希捷与西数机械硬盘选购指南:哪个更适合你?
365平台怎么样

希捷与西数机械硬盘选购指南:哪个更适合你?

📅 08-19 👀 4162
瑞士对瑞典赛事分析(瑞士对瑞典比分)
mobile28365-365

瑞士对瑞典赛事分析(瑞士对瑞典比分)

📅 07-29 👀 3117
20斤快递价格如何?不同快递公司怎么收费?
Bet体育365提款流程

20斤快递价格如何?不同快递公司怎么收费?

📅 08-21 👀 5037