在C++中,在全局区声明的数组会自动初始化
如果没有为全局区的整数类型的数组指定初始值,那么它的元素都会被自动初始化为0。该特性适用于所有整数类型的数组,包括char、short、int、long等。(注:char类型数组自动初始化为0,这里的0指的是字符对应的ASCII值,而整数0对应的字符是空字符\0,即全局区的char类型的数组的每个元素都会自动初始化为空字符\0)
如果没有为全局区的指针类型的数组指定初始值,则数组元素的初始值为nullptr。
如果需要指定其他的初始值,可以在声明数组时进行初始化,例如:
int arr[10] = {1, 2, 3}; // 声明一个包含10个元素的数组,前三个元素的值分别为1、2、3,其余元素的初始值为0
或者利用下标逐个赋值:
int arr[10];
for (int i = 0; i < 10; ++i) {
arr[i] = i; // 数组元素的值依次为0、1、2、3、4、5、6、7、8、9
}
对int a[10]={0}的误解
因为int a[10]={0}的结果是将数组a中的每个元素都初始化为0,所以以前的我就自认为该行代码的作用是将数组a中的每个元素都初始化为0(错误),这其实是完全不对的,这行代码的实际作用是将数组a的第一个元素初始化为0,而其他9个元素因为没有被初始化所以都被自动初始化为0(正确)
int a[10]={1};
//这行代码仅仅是将数组中的第一个元素初始化为1,其他9个元素则默认初始化为0
//相当于int a[10]={1,0,0,0,0,0,0,0,0,0,0};
二维数组也是同理,如char a[3][3]={'0'};仅仅是将数组a的第一行第一列的元素初始化为字符'0',而对于其他没有被初始化的元素都被自动初始化为空字符'\0'