一维数组
- C++使用数组来实现一次性声明很多变量的功能,具有以下特性:
- 创建后的数组大小固定
- 同一数组中的元素类型相同
- 是一系列数据顺序集合
在计算中,要存储数据就需要用到变量;但在处理大量的数据时,太多的变量就不大好处理了。
数组声明
- 在C++中声明数组时,需要指定元素类型、数组名称以及数组长度:
元素类型 数组名称[数组长度];
- 数组的元素类型只需指定一次,代表整个数组中所有元素的类型
- 数组长度代表数组容纳元素的数量,必须是一个**固定的整型常量**,
Tips:在声明数组后,内存会为数组分配一块连续的空间。我们可以从内存的角度再来理解一下数组:数组中包含若干个元素,每个元素都是一个变量,因此每个元素都是有地址的,而数组名其实表示的就是第一个元素的起始地址。
数组访问元素
- 声明一个数组之后,数组中的每个元素可以通过索引来访问
- 数组的索引的范围是从
0
到数组长度-1
- 数组元素的访问形式是
数组名称[索引序号]
- 数组的索引的范围是从
数组初始化
-
在C++中,数组的初始化有如下两种方式:
- 一种初是在声明的同时,使用大括号包含对应数值,直接对整个数组初始化
- 另一种初始化方式是在声明之后,逐个访问数组元素进行一一初始化赋值
#include <iostream> using namespace std; int main() { // TODO 声明时对整个数组初始化 // TODO 第一种:大括号中包含 1,3,5,7,9,11这6个值 int sales_1[6] = {1, 3, 5, 7, 9, 11}; // TODO 第二种:大括号中包含 1,3这2个值,其他默认初始化为0 int sales_2[6] = {1, 3}; // TODO 第三种:大括号中包含 1,3,5,7,9,11这6个值,但是不指定数组的长度,会得到一个长度为6的数组 int sales_3[] = {1, 3, 5, 7, 9, 11}; // TODO 声明后对每个元素依次赋值 int sales_4[6]; for (int i = 0; i < 6; i++) { sales_4[i] = 2 * i + 1; } return 0; }
多维数据
除了一维形式的数据,现实生活中也有多个维度的复杂数据。
- 在C++中,每一个元素也是数组的数组称为多维数组。
- 例如,二维数组可以看作是每个元素都是一维数组的数组
二维数组的用法
二维数组的声明
- 声明二维数组需要在命名的同时,指定元素的类型以及每个维度的长度:
元素类型 数组名称[数组第一个维度长度][数组第二个维度长度]
二维数组访问元素
- 类似一维数组,二维数组依然通过索引来访问元素
- 数组每一维度的索引范围是从
0
到维度长度-1
- 数组元素的访问形式是
数组名称[行索引][列索引]
- 数组每一维度的索引范围是从
二维数组的初始化
二维数组的初始化有两种方式:
- 第一种方式是在声明时对整个二维数组初始化:
二维数组初始化的程序段(一):
int scores[5][3] = {
{8, 4, 6} , /* 初始化索引号为 0 的行 */
{5, 6, 3} , /* 初始化索引号为 1 的行 */
{3, 2, 4} , /* 初始化索引号为 2 的行 */
{8, 7, 6} , /* 初始化索引号为 3 的行 */
{7, 9, 8} , /* 初始化索引号为 4 的行 */
};
// 或者省略掉第二层的大括号
int scores[5][3] = {8, 4, 6, 5, 6, 3, 3, 2, 4, 8, 7, 6, 7, 9, 8};
Tips:在这种情况下,如果给出的元素数量少于本身的数量,那么后面的依然会被默认初始化为0。
- 第二种初始化方式是在声明后分别对每一个元素逐一进行访问,并且进行初始化赋值
- 可以借助for语句的嵌套来实现
二维数组初始化的程序段(二):
int scores[5][3];
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) cin >> scores[i][j];
}
Tips:在这种情况下,需要事先明确每个for语句的循环次数。否则,可能会产生数组越界等问题。
二维数组的输入输出
在C++中,和一维数组一样,普通的二维数组也只能对单个元素进行输入输出。