一、二维数组的定义及初始化
二维数组可以看做是一个由若干一维数组组成的数组,我们可以通过定义一个二维数组来表示一个行列固定、元素类型相同的矩阵。在C++中,可以使用两种方式来定义并初始化一个二维数组:
//第一种方式:明确指定行和列,然后进行初始化 int array1[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; //第二种方式:只指定行数,然后在使用时再定义列数 int array2[3][] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };
需要注意的是,在第二种方式中,定义的数组只有行数确定,列数不确定,因此在使用该数组时,需要显式指定列数。如:int array2[][4] = {…}。
二、二维数组元素的访问
在访问二维数组时,通常使用两个for循环:第一个循环遍历每一行,第二个循环遍历当前行的每一个元素。
int array[3][4]; //初始化二位数组 for(int i = 0; i < 3; i++) { for(int j = 0; j < 4; j++) { array[i][j] = i * 4 + j + 1; } } //输出数组中的元素 for(int i = 0; i < 3; i++) { for(int j = 0; j < 4; j++) { cout << array[i][j]<< " "; } cout << endl; }
也可以使用指针来访问二位数组中的元素,需要先定义一个指向二维数组的指针,然后通过指针来访问数组中的元素。
int array[3][4]; int* p = NULL; //初始化二维数组 for(int i = 0; i < 3; i++) { for(int j = 0; j < 4; j++) { array[i][j] = i * 4 + j + 1; } } //使用指针访问二维数组中的元素 p = &array[0][0]; for(int i = 0; i < 3; i++) { for(int j = 0; j < 4; j++) { cout << *(p + i * 4 + j) << " "; } cout << endl; }
三、二维数组的转置
在数学中,矩阵的转置是指将矩阵的行与列交换的操作。在二维数组中,矩阵转置的操作可以简单地通过交换每一个元素的下标来实现。
//定义并初始化一个3*4的二维数组 int array[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; //输出原始矩阵 cout << "原始矩阵:" << endl; for(int i = 0; i < 3; i++) { for(int j = 0; j < 4; j++) { cout << array[i][j] << " "; } cout << endl; } //矩阵转置 for(int i = 0; i < 3; i++) { for(int j = i + 1; j < 4; j++) { int temp = array[i][j]; array[i][j] = array[j][i]; array[j][i] = temp; } } //输出转置后的矩阵 cout << "转置后的矩阵:" << endl; for(int i = 0; i < 4; i++) { for(int j = 0; j < 3; j++) { cout << array[i][j] << " "; } cout << endl; }
四、二维数组之间的赋值和拷贝
在C++中,可以使用等号、memcpy函数或者循环的方式来进行二维数组之间的赋值和拷贝。
//定义并初始化一个3*4的二维数组 int array1[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; //使用等号赋值 int array2[3][4]; array2 = array1; //错误的方式,无法通过编译 //使用memcpy函数拷贝 int array2[3][4]; memcpy(array2, array1, sizeof(array1)); //需要指定拷贝的大小 //使用循环来赋值或拷贝 int array2[3][4]; for(int i = 0; i < 3; i++) { for(int j = 0; j < 4; j++) { array2[i][j] = array1[i][j]; } }