数组#
需求
简单理解 数组 的概念。
计算机的内存是一个字节序列。可以将字节序列的字节从 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]; // 错误:数组大小不是常量
}