目标:
对于数组这一块,我们要理解它的概念,语法,以及如何使用。
1.数组的概念和语法
概念:数组是一组相同类型元素的集合
注意:数组中存放的是1个或多个数据,但不能是0个,且这些数据类型相同
(我们可以跟高中数学中的集合类比,但C语言 数组不能是“空集”)
语法:(我们一般会用到一维数组和二维数组)
一维数组:
type arr_name[常量值]
二维数组:
type arr_name[常量值][常量值]
type:
数组的类型
一般是:char(字符) short(短整型)
int(整型) float (浮点型(小数))
arr_name:
数组名的名字,这个如何命名根据实际情况,有意义就行.
[ ]:
下标引用操作符,其中的常量值是用来定义数组大小的,也是根据实际情况
提醒 • 短整型和整型的区别:它们的存储大小和表示范围不同
1.存储大小:short 类型通常占用两个字节
int 类型通常占用四个字节
2.表示范围:short 范围一般是 -32,768 到 32,767
int 范围一般是 -2,147,483,648到 2,147,483,647
(初学者对此不用了解太多,具体情况具体分析)
下面举几个理解强化我们的理解:
1. int math [20] ; → 存储二十个整型数据
2. char ch[8] ; → 存储八个字符
3. double score[10] ; → 存储十个高精度浮点数
2.数组的初始化和使用(重)
存放数据的目的是对它们进行操作,那我们如何操作数组呢?
2.1一维数组
一维数组初始化
完全初始化
int arr [ 5 ] = {1,2,3,4,5};
不完全初始化
int arr2 [ 6 ] = {1 } ; //第⼀个元素初始化为1,剩余的元素默认初始化为0
注意,下面是错误的初始化
int arr3 [ 3 ] = {1, 2, 3, 4}; →初始化项太多
一维数组的下标
C语言规定数组是有下标的,下标从 0 开始,假设数组有 n 个元素,那么最后一个元素下标就是 n-1 .
例如:
1.int arr [10] ={ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 };
实际操作一下:
那么如何打印一维数组全部内容
我们可以 使用 for 循环产生 0~9 的下标就可以了。
当然我们可以根据实际需求给数组输入自己想要的数据
在 第 22 行代码 中,尽管我们赋予了数组中十个数的值,但我们是通过 scanf 让用户输入值来覆盖我们初始化的值
2.2二维数组
如果我们把一维数组作为数组的元素,这时候就是二维数组,同样的,把二维数组作为元素,这时候就是三维数组,这些都是多维数组
根据最开始讲的二维数组语法我举几个例子帮大家理解 :
1. int arr [ 2 ] [ 4 ] ;
解释:
2 表示数组有两行
4 表示每行有五个数据
二维数组的初始化
跟一维数组一样,给定一些初始值,叫做初始化
我们要知道→ type arr_name[行][列]
完全初始化
int arr [ 3 ][ 5 ] = {1,2,3,4,5 , 2,3,4,5,6 , 3,4,5,6,7};
按照行初始化
int arr [ 3 ][ 5 ] = { { 1 , 2 } , { 3 , 4 } , { 5 , 6 } } ;
图
注意,在初始化时我们可以省略行,但不能省略列
即上面数组可以写为 int arr [ ][ 5 ] = { { 1 , 2 } , { 3 , 4 } , { 5 , 6 } } ;
二维数组的下标
其实二维数组的下标跟平面坐标系的坐标一样,需要确定行和列(x和y)
同样的,我们可以从上面几幅图看到,二维数组的行和列的下标也都是从 0 开始的,如何定位如下(参考上两幅图):
如何打印二维数组的全部内容
此时我们要控制 两个for循环,一个产生 列,一个产生 行,
具体如下
3.C99中的变长数组
在C99标准之前,我们创建数组的时候,数组大小的指定只能使用常量或常量表达式
这样的语法让我们创建数组不够灵活
于是人们在C99中加了一个变长数组(variable-length array,简称 VLA),即可以使用变量指定数组大小
int n =a+b;
int arr [n]
上面 数组arr 就是 变长数组
变长数组本质特征:数组长度只有在运行时才能确定,所以变长数组不能初始化
目前:有些编译器支持C99变长数组的语法,例如gcc等;不过遗憾的是,在VS2022上不支持
结尾:
数组也是C语言中重要的一部分,学号它不仅需要充分学习理论知识,更多的是如何去实践它。
创作者留言:本人是初学者,文章中可能出现错误或者不恰当的地方,欢迎大家指正与建议!
创作时间:2023.11.26