【C语言】二维数组(详解)
前面我们深入学习了一维数组的相关知识,现在我们开始二维数组的学习之旅吧!1.二维数组的创建1.1二维数组的概念前面学习的数组被称为一维数组,数组的元素都是内置类型的,如果我们把一维数组作为数组的元素,这就是二维数组,二维数组作为数组元素的数组被称为三维数组,把二维数组以上的数组统称为多维数组。1.2二维数组的创建定义二维数组的语法如下:1typearr_name [常量值1] [常量值2];23例
正文开始——
前言
前面我们深入学习了一维数组的相关知识,现在我们开始二维数组的学习之旅吧!
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. 数组练习
题目:多个字符从两端移动,向中间汇聚
二维数组的学习就结束了,下来我们要好好练练习题才能对二维数组的掌握及其运用更加熟练。
完——
——————————宫崎骏动漫里的夏天—————————
期待我们下一次的共同学习!
再见——
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)