数组

我们在第二章第一部分结尾初步认识了数组。所以我们先来复习一下数组:

什么是数组

数组是由一连串连续的、同类型的变量组成的一种特别的数据类型。这些同类型的变量称为数组的元素,它们的总个数称为数组的大小。数组的大小必须是常量,常量是编译期间能够确定的值。

声明并定义一个数组

类型说明符 数组名[数组大小] 初始化器;

形如 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 的首个元素

各种注意事项

除了在介绍数组时提到的几条注意事项

  1. 数组的大小必须是常量
  2. 数组不能被整体赋值
  3. 数组越界不会给出错误
  4. 不写初始化器时不会进行数组的初始化

之外,我再给出一条注意事项:特别大的数组不宜直接定义于函数内。比如下面的代码是不好的:

int main() {
    int a[2000000]; // 不好
}

这是因为,计算机分配给函数的的空间是有限制的,如果数组过大就会超过这个限制从而导致运行时错误。你可以通过将其定义为全局变量来避免这一问题:

int a[2000000]; // OK
int main() {
    // codes using a...
}

但更推荐使用在后续章节提及的静态局部变量来解决:

int main() {
    static int a[2000000]; // OK
    // codes using a...
}

对这些注意事项有一定印象之后,我将展开讲数组的各种细节问题。首先从数组的定义和初始化开始吧。

最近更新:
代码未运行