C++ 中的数组 |声明 |初始化 |指向数组示例的指针
什么是数组?
数组是一种数据结构,它按顺序存储相同数据类型的元素。 C++ 数组具有固定大小。
您可以将数组视为类似数据类型的变量的集合。您可以声明一个变量(数组)并将各种变量的值添加到其中,而不是声明每个变量并单独为其分配一个值。添加到数组的每个值都由索引标识。
在本 C++ 教程中,您将学习:
- 什么是数组?
- 为什么我们需要数组?
- 在 C++ 中声明一个数组
- 数组初始化
- 数组类型
- 一维数组
- 多维数组
- 二维数组
- 三维数组
- 指向数组的指针
- 访问数组的值
- C++ 中数组的优点
- C++中数组的缺点
为什么我们需要数组?
数组在任何编程语言中都非常重要。它们提供了一种更方便的方式来存储变量或类似数据类型的数据集合,而不是单独存储它们。数组的每个值都将被单独访问。
在 C++ 中声明一个数组
C++ 中的数组声明涉及说明类型以及数组要存储的元素数量。语法:
type array-Name [ array-Size ];
在 C++ 中声明一维数组的规则。
- 类型: 类型是要存储在数组中的元素的类型,它必须是有效的 C++ 数据类型。
- 数组名称: array-Name 是要分配给数组的名称。
- 数组大小: array-Size 是要存储在数组中的元素的数量。必须是整数且大于 0。
例如,您可以创建一个名为 age 的数组,并存储 5 个学生的年龄,如下所示:
int age[5];
数组 age 将存储 5 个整数,代表不同学生的年龄。
数组初始化
数组初始化是将元素分配/存储到数组的过程。初始化可以在单个语句中完成,也可以逐个完成。请注意,数组中的第一个元素存储在索引 0 处,而最后一个元素存储在索引 n-1 处,其中 n 是数组中元素的总数。
在年龄数组的情况下,第一个元素将存储在索引 0 处,而最后一个元素将存储在索引 4 处。
让我们使用年龄数组来演示如何进行数组初始化:
int age[5] = {19, 18, 21, 20, 17};
{ } 中的元素总数不能超过 [ ] 中规定的值。元素 19 位于索引 0、18 位于索引 1、21 位于索引 2、20 位于索引 3 和 17 位于索引 4。如果在 [] 内未说明要存储在数组中的元素数,则数组只会大到足以容纳 { } 中添加的元素。例如:
int age[] = {19, 18, 21, 20, 17};
上面的语句将创建与前一个完全相同的数组。您还可以使用其索引将一个元素分配给数组。例如:
age[3] = 20;
上面的语句将值 20 存储在名为 age 的数组的索引 3 处。这意味着 20 将是第 4 th 数组的元素。
数组类型
C++ 数组有两种类型:
- 一维数组
- 多维数组
- 指向数组的指针
一维数组
这是一个数组,其中数据项仅在一维中线性排列。它通常被称为一维数组。语法:
datatype array-name[size];
- array-name 是数组的名称。
- 大小是要存储在数组中的项目数。
例如:
#include <iostream> using namespace std; int main() { int age[5] = { 19, 18, 21, 20, 17 }; for (int x = 0; x < 5; x++) { cout <<age[x]<<"\n"; } }
输出:
下面是代码截图:
代码说明:
- 在我们的代码中包含 iostream 头文件。它将允许我们读取和写入控制台。
- 包含 std 命名空间,以便在不调用它的情况下使用它的类和函数。
- 调用 main() 函数,在其中添加程序的逻辑。
- main() 函数体的开始。
- 声明一个名为 age 的数组来存储 5 个整数。 5 个整数也已初始化。
- 使用 for 循环创建一个整数变量 x。
- for 循环体的开始。
- 使用循环变量 x 遍历数组 age 的值并在控制台上打印它们。 “\n” 是换行符,每次迭代后都会在新行中打印。
- for 循环体的结尾。
- main() 函数主体的结尾。
多维数组
这是一个数组,其中数据项被排列以形成数组的数组。多维数组可以有任意维数,但二维和三维数组很常见。语法:
datatype array-name[d1][d2][d3]...[dn];
array-name 是具有 n 维的数组的名称。例如:
二维数组
二维数组将数据存储在具有一维数组的列表中。它是一个有行和列的矩阵。要声明一个二维数组,请使用以下语法:
type array-Name [ x ][ y ];
该类型必须是有效的 C++ 数据类型。将二维数组视为表格,其中 x 表示行数,而 y 表示列数。这意味着您可以使用 a[x][y] 的形式识别 2D 数组中的每个元素,其中 x 是行数,y 是元素所属的列数。
下面是一个如何初始化二维数组的例子:
int a[2][3] = { {0, 2, 1} , /* row at index 0 */ {4, 3, 7} , /* row at index 1 */ };
在上面的例子中,我们有一个二维数组,可以看作是一个 2×3 矩阵。有 2 行 3 列。元素 0 可以作为 a[0][1] 访问,因为它位于索引为 0 的行和索引为 1 的列的交点处。元素 3 可以作为 a[1][2] 访问,因为它位于行索引 1 和列索引 2 的交集。
请注意,我们只是添加了花括号来区分不同的元素行。初始化也可以如下进行:
int a[2][3] = {0, 2, 1, 4, 3, 7}; };
下面的 C++ 示例演示了如何初始化和遍历二维数组:
#include <iostream> using namespace std; int main() { // a 2x3 array int a[3][2] = { {0, 2}, {1, 4}, {3, 7} }; // traverse array elements for (int i=0; i<3; i++) for (int j=0; j<2; j++) { cout << "a[" <<i<< "][" <<j<< "]: "; cout << a[i][j] << endl; } return 0; }
输出:
下面是上面代码的截图:
代码说明:
- 在我们的代码中包含 iostream 头文件。它将允许我们读取和写入控制台。
- 包含 std 命名空间,以便在不调用它的情况下使用它的类和函数。
- 调用应该添加代码的 main() 函数。
- main() 函数体的开始。
- 评论。 C++ 编译器会跳过这个。
- 声明一个 3 行 2 列的二维数组。项目也已添加到数组中。
- 评论。 C++ 编译器会跳过这个。
- 使用 for 循环创建变量 i。此变量将遍历数组的行索引。
- 使用 for 循环创建变量 j。此变量将遍历数组的列索引。
- 循环体的开始。
- 在控制台方括号内打印变量 i 和 j 的值。
- 打印出存储在数组 a 的索引 [i][j] 处的值。
- 循环体的结尾。
- 如果程序运行良好,main() 函数应该返回一个整数值。
- main() 函数体的结尾。
三维数组
3D 数组是数组的数组。 3D 数组中的每个元素由一组 3 个索引标识。为了访问 3D 数组的元素,我们使用了三个 for 循环。例如:
#include<iostream> using namespace std; void main() { int a[2][3][2] = {{{4, 8},{2, 4},{1, 6}}, {{3, 6},{5, 4},{9, 3}}}; cout << "a[0][1][0] = " << a[0][1][0] << "\n"; cout << "a[0][1][1] = " << a[0][1][1] << "\n"; }
输出:
下面是代码截图:
代码说明:
- 在我们的代码中包含 iostream 头文件。它将允许我们读取和写入控制台。
- 包含 std 命名空间,以便在不调用它的情况下使用它的类和函数。
- 调用 main() 函数,在其中添加程序的逻辑。
- main() 函数体的开始。
- 声明一个名为 an 大小为 2x3x2 的 3D 数组。数组的值也已初始化。
- 访问存储在数组索引 [0][1][0] 处的项目并将其打印在控制台上。
- 访问存储在数组索引 [0][1][1] 处的项目并将其打印在控制台上。
- main() 函数主体的结尾。
指向数组的指针
指针是一个保存地址的变量。除了使用指针来存储变量的地址外,我们还可以使用它来存储数组单元格的地址。数组的名称总是指向它的第一个元素。考虑下面给出的声明:
int age[5];
age 是指向 $age[0] 的指针,$age[0] 是一个名为 age 的数组的第一个元素的地址。考虑以下示例:
#include <iostream> using namespace std; int main() { int *john; int age[5] = { 19, 18, 21, 20, 17 }; john = age; cout << john << "\n"; cout << *john; }
输出:
请注意,上述输出的第一个值可能会返回不同的值,具体取决于分配给计算机内存中数组第一个元素的地址。
下面是代码截图:
代码说明:
- 在我们的代码中包含 iostream 头文件。它将允许我们读取和写入控制台。
- 包含 std 命名空间,以便在不调用它的情况下使用它的类和函数。
- 调用 main() 函数,在其中添加程序的逻辑。
- main() 函数体的开始。
- 声明一个名为 *john 的指针变量。
- 声明一个名为 age 的整数数组来存储 5 个整数。整数的值也已初始化。
- 将存储在数组age的第一个索引中的项目的地址值分配给变量john。
- 打印变量john的值,即存储在数组age的第一个索引中的item的地址。
- 打印存储在数组 age 中的第一个值。
- main() 函数主体的结尾。
数组名可以用作常量指针,反之亦然。这意味着您可以使用 *(age + 3) 访问存储在数组 age 的索引 3 处的值。例如:
#include <iostream> using namespace std; int main() { // an array of 5 elements. int age[5] = { 19, 18, 21, 20, 17 }; int *p; p = age; // output array values cout << "Using pointer: " << endl; for (int x=0; x<5; x++) { cout << "*(p + " << x << ") : "; cout << *(p + x) << endl; } cout << "Using age as address: " << endl; for (int x = 0; x < 5; x++) { cout << "*(age + " << x << ") : "; cout << *(age + x) << endl; } return 0; }
输出:
下面是代码截图:
代码说明:
- 在我们的代码中包含 iostream 头文件。它将允许我们读取和写入控制台。
- 包含 std 命名空间,以便在不调用它的情况下使用它的类和函数。
- 调用main()函数和main()函数体的开始。
- 评论。 C++ 编译器会跳过这个。
- 声明一个名为 age 的数组来存储 5 个整数。
- 创建一个整数指针 p。
- 将数组age的第一个元素的地址赋值给p。
- 评论。 C++ 编译器会跳过这个。
- 在控制台上打印一些文本。
- 使用 for 循环创建一个整数 x。 { 标记 for 循环体的开始。
- 在控制台上打印出 x 的值以及其他一些文本。
- 在控制台上打印出 *(p + x) 的值。
- for 循环体的结尾。
- 在控制台上打印一些文本。
- 使用 for 循环创建变量 x。 { 标记 for 循环体的开始。
- 打印出从 0 到 4 的 x 值以及一些其他文本。
- 打印出 *(age + x) 的值。
- for 循环体的结尾。
- 如果程序运行成功则返回值。
- main() 函数主体的结尾。
访问数组的值
使用它们各自的索引来访问数组的元素。要访问的元素的索引添加在方括号 [ ] 中,紧跟在数组名称之后。例如:
int john = age[2];
在上面的示例中,我们只是说明 john 的年龄存储在名为 age 的数组的索引 2 处。这意味着约翰的年龄是第三个 rd 数组年龄中的值。下面是一个完整的 C++ 示例,展示了如何访问和打印该值:
#include<iostream> using namespace std; int main() { int age[5] = { 19, 18, 21, 20, 17 }; int john = age[2]; cout << "The age of John is:"<<john; }
输出:
下面是代码截图:
代码说明:
- 在我们的代码中包含 iostream 头文件。它将允许我们读取和写入控制台。
- 包含 std 命名空间,以便在不调用它的情况下使用它的类和函数。
- 调用应该添加代码的 main() 函数。
- main() 函数体的开始。
- 声明一个名为 age 的数组来存储 5 个整数元素。
- 访问存储在数组 age 的索引 2 处的值并将其值存储在名为 john 的变量中。
- 在控制台上打印变量 john 的值以及其他文本。
C++ 中数组的优点
以下是在 C++ 中使用 Array 的优点/好处:
- 可以轻松遍历数组元素。
- 易于操作数组数据。
- 数组元素可以随机访问。
- 数组有助于代码优化;因此,我们可以使用更少的代码完成很多工作。
- 易于对数组数据进行排序。
C++ 中数组的缺点
- 数组的大小是固定的;因此,我们不能在初始化后向它添加新元素。
- 分配比要求更多的内存会导致内存空间浪费,而分配的内存更少会产生问题。
- 必须事先知道要存储在数组中的元素数量。
总结
- 数组是存储相同数据类型元素的数据结构。
- 数组元素按顺序存储。
- 数组元素使用它们各自的索引来表示。第一个元素在索引 0 处,而最后一个元素在索引 n-1 处,其中是数组元素的总数。
- 数组的声明涉及定义数组元素的数据类型以及要存储在数组中的元素个数。
- 一维数组按顺序存储元素。
- 二维数组以行和列的形式存储元素。
- 三维数组是数组的数组。
- 可以使用它们的索引将元素添加到数组中。
- 使用它们的索引访问数组元素。
- 多维数组具有多个维度。
- 数组名指向它的第一个元素。
- 数组的大小是固定的,这意味着在数组初始化后不能将新元素添加到数组中。
C语言