在本教程中,您将学习有关称为数组的数据结构的所有内容。借助简单的示例,您将了解如何声明、初始化和访问数组中的变量。
数组是 C++ 中可以存储多个相同类型值的变量。
例如,
假设一个班级有 29 名学生,我们需要保存他们的成绩。与其创建 29 个单独的变量,我们不如简单地创建一个数组。
double grade[29];
在上面的示例中,“grade”是一个最大容量为 29 个双精度类型元素的数组。
C++ 中的数组在声明后不能更改。
在 C/C++ 或任何其他编程语言中,数组是存储在相邻内存位置的一组相关数据项,其元素可以使用数组的索引随机访问。它们可用于存储任何类型的基本数据类型,例如 int、float、double、char 等。此外,在 C/C++ 中,数组主要用于存储派生数据类型,例如结构体、指针等。
数组的图示如下。

定义数组的一般语法如下:
dataType arrayName[arraySize];
请看下面的示例
int x[6];
在上面的例子中
int = 它指将要存储的元素类型。x = 它指数组的名称6 = 它指数组大小在这种情况下,数组 x[6] 在内存中创建六个相邻的单元格,即 x[0]、x[1]、sal[2]、x[3]、x[4] 和 x[5],用于存储 int 类型的值。
数组的分配从“null”开始,因此该系列的最后一个变量将存储在 x[size -1] 中。在我们的示例中,数组的第一个元素将分配给 x[0],最后一个元素将分配给 x[5]。
在 C++ 中,数组中的每个元素都被分配一个数字。该数字被称为数组索引。使用这些索引,我们可以访问数组元素。
访问数组元素的语法
array[index];

此图显示了 C++ 数组的元素
请记住以下几点
x[0] 表示存储在索引 0 处的第一个元素。x[5]。x[0] 的起始地址是 2120。x[1] 的地址将是 2124,x[2] 将是 2128,依此类推。int 的大小是 4 字节。数组初始化是为数组元素赋值的过程。数组元素在使用前必须初始化。如果未正确初始化,程序将产生意外结果。让我们通过示例了解数组如何初始化。
C++ 中可以在声明时初始化数组。
例如:让我们声明并初始化一个数组
int x[6] = {10, 20, 30, 40, 50, 60};

此图显示了 C++ 数组元素及其数据
在声明数组时初始化数组的另一种方法
int x[] = {10, 20, 30, 40, 50, 60};
我们在这里没有提到数组的大小。在这种情况下,编译器会自动计算大小。
我们可以在声明后初始化数组。让我们举个例子
int x[3];
x[0] = 10;
x[1] = 20;
x[2] = 30;
没有成员的数组表示空成员。在 C++ 中,如果一个数组的大小为 n,我们最多可以存储 n 个元素。然而,在 C++ 中,如果我们存储的元素少于 n 个,会发生什么?
例如
//let us store only 3 elements in the array
int x[6] = {10, 20, 30};
在这种情况下,数组 x 的大小为 6。但是,我们最初只给了它三个元素。
在这种情况下,编译器会为剩余位置分配随机值。通常,这个随机值只是 0。空数组成员会自动分配 0。

我们利用 cout 函数,在循环的帮助下,使用索引打印从数组中访问的值。
#include
using namespace std;
int main() {
int numbers[5] = {10, 20, 30, 40, 50};
cout << "The numbers : ";
// Printing the array elements
// using the range based for loop
for (int i = 0; i < 5; ++i) {
cout << numbers[i] << " ";
}
return 0;
}
输出
The numbers : 10 20 30 40 50
在此示例中,for 循环用于从 i = 0 迭代到 i = 4。我们在每次迭代中都打印了 numbers[i]。
让我们讨论如何使用基于范围的循环显示数组元素
#include
using namespace std;
int main() {
int numbers[5] = {10, 20, 30, 40, 50};
cout << "The numbers : ";
// Printing the array elements
// using the range based for loop
for (const int &n : numbers) {
cout << n << " ";
}
return 0;
}
输出
The numbers : 10 20 30 40 50
在我们的基于范围的循环中,我们使用 const int &n 作为范围声明,而不是 int n。然而,const int &n 更受青睐,因为
int n 只是将数组元素复制到变量 n。这在内存使用方面效率不高。&n 使用数组元素的内存地址来访问其数据,而无需将其复制到新变量。这节省了内存。要了解有关此范围循环的更多信息,请查看 C++ 范围 for 循环。
在 cin 函数和循环的帮助下,我们可以向数组输入值。
让我们编写一个 C++ 程序,它将从用户那里获取输入并存储在数组中。
#include <iostream>
using namespace std;
int main() {
int numbers[5];
cout << " please enter 5 numbers: " << endl;
// store the input from user to an array
for (int i = 0; i < 5; ++i) {
cin >> numbers[i];
}
cout << " So the numbers are: ";
// print the array elements
for (int n = 0; n < 5; ++n) {
cout << numbers[n] << " ";
}
return 0;
}
输出
please enter 5 numbers: 11 12 17 18 19 So the numbers are: 11 12 17 18 19
我们再次使用 for 循环从 i = 0 迭代到 i = 4。在每次迭代中,我们获取用户输入并将其存储在 numbers[i] 中。
然后我们使用另一个 for 循环打印出所有数组元素。
#include <iostream>
using namespace std;
int main() {
// first initialize an array without specifying its size
double numbers[] = {7, 15, 16, 12, 35, 2};
double sum = 0;
double count = 0;
double average;
cout << "So the numbers are: ";
// print the array elements
// here, use of range-based for loop
for (const double &n : numbers) {
cout << n << " ";
// calculate the sum
sum += n;
// count the number of the array elements
++count;
}
// print the sum
cout << "\nTheir Sum = " << sum << endl;
// find the average
average = sum / count;
cout << "Their Average = " << average << endl;
return 0;
}
输出
So the numbers are: 7 15 16 12 35 2 Their Sum = 87 Their Average = 14.5
在程序中
如果我们声明一个包含 10 个元素的数组,则该数组将包含从 0 到 9 的元素。
但是,尝试访问索引 10 或更高的元素将导致未定义行为。这就是 C++ 中的数组越界。
当我们有少量对象时,可以使用普通变量(v1、v2、v3 等),但是当有大量实例时,使用普通变量管理它们会变得非常困难。因此,使用数组的主要思想是在单个变量中表示多个实例。

要练习更多数组程序,请参阅我们的示例程序。