在C++编程语言中,数组是一种非常基础且重要的数据结构,用于存储同类型的数据集合。数组的初始化是在声明数组的同时给数组中的元素赋予初始值。这在编程中尤其重要,因为未初始化的变量或数组元素可能会包含不确定的值,导致程序出现不可预期的行为。
在C++中,一维数组的初始化可以通过以下格式进行:
```cpp
类型名 数组名[常量表达式] = {值1, 值2, ..., 值n};
```
例如,声明一个包含10个整数元素的数组`a`并为其赋值:
```cpp
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
```
这相当于逐个给数组元素赋值:
```cpp
a[0] = 0;
a[1] = 1;
a[2] = 2;
...
a[9] = 9;
```
在【例5.4】中,我们看到如何用数组初始化来解决实际问题。数组`a`被初始化为每月的天数(不考虑闰年),然后通过累加数组元素计算输入日期在当年的位置。在处理闰年时,需要额外检查年份是否能被4整除但不能被100整除,或者能被400整除,以确定是否为闰年,并在必要时增加一天。
在【例5.5】中,展示了未初始化的数组会含有未知的初始值。程序1和程序2的差异在于数组定义的位置,但这并不影响未初始化数组元素的初始值,它们通常包含的是内存中的随机数据。因此,在编程中应始终初始化变量,以避免潜在的错误。
【例5.6】展示了部分初始化数组的情况。如果只给数组的一部分元素赋值,剩余的元素将自动赋值为0(对于数值类型)。例如:
```cpp
int a[5] = {1, 2};
```
输出将是1 2 0 0 0,因为仅`a[0]`和`a[1]`被赋值,其余元素默认为0。
在【例5.6】的程序2中,使用了`memset`函数从头到尾将整个数组初始化为0。`memset`函数来自`<cstring>`库,其基本用法是`memset(目标地址, 填充的值, 填充的字节数)`。这个例子中,`memset(a, 0, sizeof(a))`将数组`a`的所有元素设为0。另外,也可以通过循环来逐个元素地赋值为0。使用`memset`时,注意确保填充的字节数是正确的,否则可能会意外修改到内存中的其他数据。
除了`memset`,还可以使用循环初始化数组的所有元素,例如:
```cpp
for (int i = 0; i < 5; i++) {
a[i] = 0;
}
```
总结来说,C++中数组的初始化是一项基本操作,它确保数组元素在使用前具有已知的初始值。未初始化的数组元素可能含有随机值,这可能导致程序错误。部分初始化数组时,未明确赋值的元素默认为0(对于数值类型)。初始化数组的方法包括直接在声明时赋值、使用循环以及使用`memset`函数。在编程实践中,始终初始化变量是良好的编程习惯,可以避免因未初始化导致的难以排查的问题。