您的位置:

用C++实现数组初始化

一、数组初始化介绍

在C++中,数组是一种由相同类型的元素组成的集合。而数组初始化可以理解为在创建数组的同时给数组元素赋初值的过程。这对于提高编程效率和确保程序正确性都非常有帮助。

C++中有多种方式可以进行数组的初始化,本文将从常规的数组静态初始化、动态初始化和初始化列表,以及C++11新增的全零初始化、默认初始化几个方面进行详细介绍。

二、常规的数组静态初始化


#include
   
using namespace std;

int main() {
    int arr1[5] = {1, 2, 3, 4, 5}; //只给部分元素赋值,剩余元素默认为0
    int arr2[] = {1, 2, 3, 4, 5}; //编译器自动推断数组长度
    int arr3[5] = {0}; //数组所有元素都初始化为0
    int arr4[5]; //不初始化,数组元素的值为未定义
    //输出数组元素的值
    for (int i = 0; i < 5; ++i) {
        cout << "arr1[" << i << "]=" << arr1[i] << ", ";
        cout << "arr2[" << i << "]=" << arr2[i] << ", ";
        cout << "arr3[" << i << "]=" << arr3[i] << ", ";
        cout << "arr4[" << i << "]=" << arr4[i] << endl;
    }
    return 0; 
}

   

上述代码中,通过使用“{}”来初始化数组元素。数组静态初始化可以在声明数组时定义数组的元素值,在程序运行时不会改变。需要注意的是,在不同编译器中,对于未初始化的元素值都可能存在一些区别。

三、常规的数组动态初始化


#include
   
using namespace std;

int main() {
    int n = 5;
    int *p = new int[n];
    //动态初始化数组元素
    for (int i = 0; i < n; ++i) {
        *(p+i) = i+1;
    }
    //输出数组元素的值
    for (int i = 0; i < n; ++i) {
        cout << "p[" << i << "]=" << *(p+i) << ", ";
    }
    delete []p;
    return 0; 
}

   

上述代码中,通过使用new运算符和delete运算符分别在堆上申请和释放内存,并使用循环语句全局调整数组元素的值。需要注意的是,在使用动态内存时,为了防止内存泄漏错误,一定要记得在程序结束时使用delete运算符释放内存。

四、C++11新增的全零初始化


#include
   
using namespace std;

int main() {
    int arr[5]{}; //所有元素都初始化为0
    //输出数组元素的值
    for (int i = 0; i < 5; ++i) {
        cout << "arr[" << i << "]=" << arr[i] << ", ";
    }
    return 0; 
}

   

在C++11新增的全零初始化方式是直接使用{}对数组进行初始化,能够保证所有元素都为0或者nullptr(指针的情况下)。这种初始化方式可以避免一些可能在忘记初始化变量时出现的错误,提高程序的可读性和正确性。

五、C++11新增的默认初始化


#include
   
using namespace std;

int main() {
    int arr[5]; //未初始化,元素值为未定义
    //输出数组元素的值
    for (int i = 0; i < 5; ++i) {
        cout << "arr[" << i << "]=" << arr[i] << ", ";
    }
    return 0; 
}

   

C++11新增的默认初始化是指除了全局变量和静态变量外,不给变量赋值时会自动进行初始化。对于数组类型的变量,将所有元素都初始化为未定义的随机值。因此,尽管默认初始化使用简单,但其存在随机值的缺点,在程序编写时应慎用。

六、总结

本文从常规的数组静态初始化、动态初始化和初始化列表,以及C++11新增的全零初始化、默认初始化几个方面对数组初始化进行了详细介绍。对于不同的场景,可以选择不同的初始化方式以保证程序的正确性。