C语言(六)数组
数组
(一) 数组是什么?
数组是C语言中重要的数据类型,它是一个容器,其中存放了许多数据类型相同的元素。
打个比方,数组就像一个柜子,每个格子放了一个写着数字或字母的小球,数组一旦创建,就不能再改变大小。
(二) 数组的格式?
数组的基本格式为:数据类型 数组名[元素数量]。例如:
1 |
|
(三) 一维数组的初始化和访问
1. 一维数组的初始化
(1) 完全初始化
在声明数组时,显式地为每个元素指定初始值。
1 | int arr[5] = {1, 2, 3, 4, 5}; |
在这种情况下,数组arr的每个元素都被显式地初始化为指定的值。
(2) 部分初始化
如果提供的初始值少于数组的大小,那么未显式初始化的元素会被默认初始化为0(对于数值类型)或空字符\0(对于字符类型)。
1 | int arr[5] = {1, 2}; // arr[0] = 1, arr[1] = 2, arr[2] = 0, arr[3] = 0, arr[4] = 0 |
(3) 隐式初始化
当数组大小没有显式指定时,编译器会根据提供的初始值的数量推断数组的大小。
1 | int arr[] = {1, 2, 3}; // 数组大小为3 |
(4) 默认初始化
如果不提供初始值,数组的元素值是未定义的(对于局部数组),但在全局或静态范围内声明的数组会被默认初始化为0。
1 | int arr[5]; // 局部数组,未初始化,元素值未定义(每个元素值都是一个随机的数值)(如果它是全局变量,则每个元素会被初始化为0) |
2. 一维数组的访问
数组的访问是指通过索引或指针获取或修改数组中的元素。
遍历数组指的是按照一定的顺序访问数组中的每个元素。方括号[]中的数字表示的是要访问的元素的位置,即它是数组中第几个元素,这个数字被称为数组的下标。
:::warning
数组的下标从 $0$ 开始,数组的下标不能超过数组的长度。
:::
1 |
|
3. 数组越界访问
数组越界访问是指访问数组的有效索引范围之外的元素。这是一个常见错误,可能导致未定义行为,包括程序崩溃或数据损坏。
1 |
|
因为数组下标从0开始,所以这个数组的有效索引范围是0到4,试图访问arr[5],程序可能会崩溃。
(四) 二维数组的初始化和访问
1. 二维数组
二维数组本质上是由许多个相同类型的一维数组组成的。
就像这样:
arr[0][0] | arr[0][1] | arr[0][2] | arr[0][3] | arr[0][4] |
arr[1][0] | arr[1][1] | arr[1][2] | arr[1][3] | arr[1][4] |
arr[2][0] | arr[2][1] | arr[2][2] | arr[2][3] | arr[2][4] |
arr[3][0] | arr[3][1] | arr[3][2] | arr[3][3] | arr[3][4] |
2. 二维数组的初始化
(1). 完全初始化
1 |
|
(2). 部分初始化
1 |
|
(3). 隐式初始化(自动推断大小)
对于多维数组,只有最外层的大小可以省略并由编译器推断。
1 |
|
先前我们提到,二维数组可以看作是由多个一维数组组成的,每个一维数组代表二维数组的一行。
例如,int number[2][3] 创建了一个两行三列的二维数组,这就像创建了一个一维数组,其中每个元素本身又是一个一维数组。
::: warning
不能像下面这样做:
1 |
|
:::
(3). 二维数组的访问
和一维数组一样,访问二维数组的元素也是通过下标。
1 |
|
(五) 数组的大小
数组的大小由数组的元素个数决定,数组的大小是固定的,不能改变。
如何查看数组的大小呢?使用 sizeof
操作符即可。C语言中, sizeof
用于获取数据类型或变量的大小,单位是字节。它的用法如下:
1 | //相信大家已经对程序整体的结构有了一个大致的了解,从这里开始我有些地方就只给代码片段了, |
明白了 sizeof
的用法后,我们再看看如何获取数组的大小:
1 |
|
(六) 字符数组
C语言用字符数组存放字符串,字符数组中的各元素依次存放字符串的各字符。
例如:char s[10]="abc defgh";
,该数组在计算机中存储的形式为:
s[0] | s[1] | s[2] | s[3] | s[4] | s[5] | s[6] | s[7] | s[8] | s[9] |
---|---|---|---|---|---|---|---|---|---|
a | b | c | 空格 | d | e | f | g | h | \0 |
结尾的 \0
是字符串的结束标志,表示字符串结束,一般不需要我们手动添加,编译器会自动加上。