【C/C++】数组定义及初始化

一、一维数组

  • 静态 int array[100]; //定义了数组array,并未对数组进行初始化
  • 静态 int array[100] = {1,2}; //定义并初始化了数组array
  • 动态 int* array = new int[100]; delete []array; //分配了长度为100的数组array
  • 动态 int* array = new int[100](1,2); delete []array; //为长度为100的数组array初始化前两个元素
二、二维数组
  • 静态 int array[10][10]; //定义了数组,并未初始化
  • 静态 int array[10][10] = { {1,1} , {2,2} }; //数组初始化了array[0][0,1]及array[1][0,1]
  • 动态 int (*array)[n] = new int[m][n]; delete []array;
  • 动态 int** array = new int*[m]; for(i) array[i] = new int[n]; for(i) delete []array[i]; delete []array; //多次析构
  • 动态 int* array = new int[m][n]; delete []array; //数组按行存储
三、多维数组
  • int* array = new int[m][3][4]; 只有第一维可以是变量,其他维数必须是常量,否则会报错
  • delete []array; 必须进行内存释放,否则内存将泄漏
四、通过STL容器 声明数组
  • 第一种方法
#include #include #include #include using namespace std; int main() { int N=5, M=6; vector > obj(N); //定义二维动态数组大小5行 for(int i =0; i< obj.size(); i++){ //动态二维数组为5行6列,值全为0 obj[i].resize(M); //指定二维数组大小为obj[i][M] }for(int i=0; i< obj.size(); i++){ //输出二维动态数组 for(int j=0; j < obj[i].size(); j++){ cout << obj[i][j] << " "; } cout << "\n"; } return 0; }

  • 第二种方法
#include #include #include #include using namespace std; int main() { int N=5, M=6; vector > obj(N, vector(M)); //定义二维动态数组5行6列 for(int i=0; i< obj.size(); i++){ //输出二维动态数组 for(int j=0; j < obj[i].size(); j++){ cout << obj[i][j] << " "; } cout << "\n"; } return 0; }

五、动态数组初始化
1. 元素只能初始化为元素类型的默认值,而不能像数组变量一样,用初始化列表为数组元素提供各不相同的初值。
2. 对于内置数据类型元素的数组,必须使用()来显示指定程序执行初始化操作,否则程序不执行初始化操作:
int *pia1 = new int[10]; // 每个元素都没有初始化 int *pia2 = new int[10](); // 每个元素初始化为0

3. 字符类型元素的数组,则无论是否使用(),都会自动调用其默认构造函数来初始化:
string *psa1 = new string[10]; // 每个元素调用默认构造函数初始化 string *psa2 = new string[10](); // 每个元素调用默认构造函数初始化

【【C/C++】数组定义及初始化】

    推荐阅读