目录
1. 二维数组的创建
1.1 二维数组的概念
1.2 二维数组的创建
2. 二维数组的初始化
2.1 不完全初始化
2.2 完全初始化
2.3 按照行初始化
2.4 初始化时能省略行,但不能省略列
3. 二维数组的使用
3.1 二维数组下标
3.2 二维数组的输入与输出
4. 二维数组在内存中的存储
5. C99中的变长数组
6. 数组练习
——————————宫崎骏动漫里的夏天—————————
正文开始——
前言
前面我们深入学习了一维数组的相关知识,现在我们开始二维数组的学习之旅吧!
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};
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};
第一列表示行号,第一行表示列数,第二行第四列,锁定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. 数组练习
题目:多个字符从两端移动,向中间汇聚
二维数组的学习就结束了,下来我们要好好练练习题才能对二维数组的掌握及其运用更加熟练。
完——
——————————宫崎骏动漫里的夏天—————————
茫_李润祺_高音质在线试听_茫歌词|歌曲下载_酷狗音乐酷狗音乐为您提供由李润祺演唱的高清音质无损茫mp3在线听,听茫,只来酷狗音乐!https://t1.kugou.com/song.html?id=5bDc5edCOV2
期待我们下一次的共同学习!
再见——