【小收获】数组在声明时整体赋值的细节

在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};

【小收获】数组在声明时整体赋值的细节_第1张图片

二维数组也是同理,如char a[3][3]={'0'};仅仅是将数组a的第一行第一列的元素初始化为字符'0',而对于其他没有被初始化的元素都被自动初始化为空字符'\0'


你可能感兴趣的:(C++,小收获,c++)