目录:
数组的引入:
数组的定义:
- 数组是将多个相同类型 的对象串联在一起组成的类型。
- 示例:
int a
是一个单独的整数类型,而int b[10]
则是一个包含 10 个整数的数组。
数组的初始化方式
-
缺省初始化:
- 如果数组没有被显式初始化,那么数组的元素会根据其类型使用缺省值进行初始化。例如,整数数组的元素会被初始化为
0
。
- 如果数组没有被显式初始化,那么数组的元素会根据其类型使用缺省值进行初始化。例如,整数数组的元素会被初始化为
解释:
在C++中,数组的初始化行为在函数内部和全局域的确是不同的。具体来说:
-
全局域(全局作用域):
- 全局变量或静态变量如果没有显式初始化,它们会被自动初始化为其类型的默认值。对于整数类型,这个默认值是0。
- 例如,全局整数数组会被初始化为0。
-
函数内部(局部作用域):
- 局部变量如果没有显式初始化,它们的值是未定义的。它们可能包含在内存中之前的任意值(垃圾值)。
- 局部整数数组不会被自动初始化为0,除非显式地进行初始化。
以下是一个示例代码,演示全局和局部数组在没有显式初始化时的行为:
#include <iostream>
// 全局整数数组
int globalArray[5];
void printArray(const int arr[], int size) {
for (int i = 0; i < size; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
}
int main() {
// 局部整数数组
int localArray[5];
std::cout << "Global array: ";
printArray(globalArray, 5); // 全局数组,未显式初始化,默认值为0
std::cout << "Local array: ";
printArray(localArray, 5); // 局部数组,未显式初始化,值是未定义的(垃圾值)
return 0;
}
输出结果:
Global array: 0 0 0 0 0
Local array: 2147483647 -1 0 0 134513872
//具体的垃圾值会因环境而异
-
全局数组:
globalArray
是一个全局变量,未显式初始化,因此它的元素会自动初始化为0。- 输出为
0 0 0 0 0
。
-
局部数组:
localArray
是一个局部变量,未显式初始化,因此它的元素值是未定义的,可能包含内存中的垃圾值。- 输出为一些随机值,这些值取决于内存中之前的内容。
-
聚合初始化 (aggregate initialization):
- 聚合初始化指的是在定义数组时,直接使用花括号
{}
来给数组中的元素赋值。 - 示例:
-
int b[3] = {1, 2, 3}; // 这是一种聚合初始化方式
- 聚合初始化指的是在定义数组时,直接使用花括号