数组
我们在第二章第一部分结尾初步认识了数组。所以我们先来复习一下数组:
什么是数组
数组是由一连串连续的、同类型的变量组成的一种特别的数据类型。这些同类型的变量称为数组的元素,它们的总个数称为数组的大小。数组的大小必须是常量,常量是编译期间能够确定的值。
声明并定义一个数组
类型说明符 数组名[数组大小] 初始化器;
形如 T a[N]{};
的声明语句声明了 N
个连续的 T
类型的变量,它们可以分别通过 a[0]
a[1]
…… a[N - 1]
来访问(注意是从 0 开始)。a
称作数组名,N
是数组的大小。数组可选地拥有一个初始化器,它可以是被大括号括起的、由逗号分隔的值(表达式)列表:
int a[5]{1, 3, 5, 7, 3 * 3};
上例中,数组 a
拥有 5 个 int
类型的元素,它们分别被初始化为 1
3
5
7
9
。
下标运算符
你可以通过下标表达式来获取数组的元素:
运算符 | 名称 | 作用 |
---|---|---|
a[b] | 下标运算符 | 取数组 a 的第 b 个元素(从 0 开始) |
比如:
int a[5]{1, 2, 3};
cout << a[0] << endl; // a[0] 是下标表达式,取到了 a 的首个元素
各种注意事项
除了在介绍数组时提到的几条注意事项
- 数组的大小必须是常量;
- 数组不能被整体赋值;
- 数组越界不会给出错误;
- 不写初始化器时不会进行数组的初始化。
之外,我再给出一条注意事项:特别大的数组不宜直接定义于函数内。比如下面的代码是不好的:
这是因为,计算机分配给函数的的空间是有限制的,如果数组过大就会超过这个限制从而导致运行时错误。你可以通过将其定义为全局变量来避免这一问题:
但更推荐使用在后续章节提及的静态局部变量来解决:
对这些注意事项有一定印象之后,我将展开讲数组的各种细节问题。首先从数组的定义和初始化开始吧。