数组

导航

数组#

需求

简单理解 数组 的概念。

提示

视频

计算机的内存是一个字节序列。可以将字节序列的字节从 0 开始进行编号。将这种“指明内存中位置的数字”称为 地址。可以将一个地址看作一种整型值。内存中的第一个字节的地址为 0,下一个字节的地址为 1,以此类推。字节(byte)的单位为 B,有如下单位:

\[\begin{split} \begin{cases} 1 B = 2^3 \text{bit}\\ 1 \text{word} = 2^2 B \\ 1 KB = 2^{10} B\\ 1 MB = 2^{10} KB = 2^{20} B\\ 1 GB = 2^{10} MB = 2^{30} B\\ 1 TB = 2^{10} GB = 2^{40} B\\ 1 PB = 2^{10} TB = 2^{50} B \end{cases} \end{split}\]
数组

用于表示内存中连续存储的同构对象序列(即数组的元素都具有相同的类型,且各元素之间不存在内存间隙)。数组的元素从 0 开始编号。在声明中用“方括号” [] 表示数组。

使用限制

一个具名数组的元素数目必须在编译时就已知。

重要

数组可看作是复合型的类型,即由算术类型复合而成。

声明#

声明的方法同变量声明:

int k[]; // 声明一个要指定数组的元素个数
input_line_7:2:6: error: definition of variable with array type needs an explicit size or an initializer
 int k[]; // 声明一个要指定数组的元素个数
     ^

Interpreter Error: 
int k[2]; // 正确

初始化#

初始化方法有:

int pp[] = {2, 3}; // 赋值初始化,此处没有知道元素个数,是因为由其值推断而得
int p2[2] = {2, 3}; // 显式指定数组元素个数
// { } 初始化方法
int p3[] {2, 3}; // 此处没有知道元素个数,是因为由其值推断而得
int p4[2] {};

数组的元组个数一定要是常量:

constexpr int max {100};
int gai[max]; // 一个全局数组(包含 100 个 int);“永远活跃”

void f(int n) {
    char lac[20]; // 局部数组;“活跃”至作用域结束
    int lai[60];
    double lad[n]; // 错误:数组大小不是常量
}