1 0 0 0 1 0 0 0 1这是一个 3 行 3 列的矩阵。当然可以用一个长度为 9 的数组来存储这些数据,但是却不能表现出数据的逻辑结构。因此 C++ 语言允许构造多维数组,多维数组元素有多个下标,以标识在数组中的位置。
类型 数组名[行数][列数];其中,行数和列数必须是程序编译时可以计算出的值,要么是常量,要么是常量表达式。
int num[3][4];
类型 数组名[行数][列数]= { {值, 值, ......}, {值, 值, ......}, ...... }里面的花括号中的值分别用来初始化二维数组的每一行,即第一个花括号中的值初始化第一行,第二个花括号中的值初始化第二行,不足的部分用 0 来补齐。
int num[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };完全初始化二维数组时,可以省略每一行元素的大括号:
int num[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
int num[3][4] = { {1, 2, 3}, {5, 6} };num 数组中存储的元素分别是:
1 2 3 0 5 6 0 0 0 0 0 0
int num[][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; // 编译器自动推断行数为 3
数组名[行号][列号];同一维数组的访问一样,这两个下标都需要是整型常量或者变量。例如:
#include <iostream> int main() { int num[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; int value = num[1][2]; // 访问第二行第三列的元素 std::cout << value << std::endl; return 0; }输出结果为:
7
#include <iostream> int main() { int num[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; std::cout << "修改前:" << num[1][2] << std::endl; num[1][2] = 100; // 修改数组中第二行第三列的元素 std::cout << "修改后:" << num[1][2] << std::endl; return 0; }输出结果为:
修改前:7
修改后:100
#include <iostream> int main() { int num[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; //嵌套的循环结构遍历 num 数组 for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { std::cout << num[i][j] << " "; } std::cout << std::endl; } return 0; }输出结果为:
1 2 3 4
5 6 7 8
9 10 11 12
#include <iostream> int main() { // 定义一个长度为 9 的一维数组 int array1D[9]={1,2,3,4,5,6,7,8,9}; // 定义一个 3×3 的二维数组 int array2D[3][3]={1,2,3,4,5,6,7,8,9}; // 输出一维数组的各个元素的地址 std::cout << "一维数组的元素地址和值:\n"; for(int i = 0; i < 9; i++) { std::cout << "array1D[" << i << "]: " << &array1D[i] <<" " << array1D[i] << std::endl; } // 输出二维数组的各个元素的地址 std::cout << "\n二维数组的元素地址和值:\n"; for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { std::cout << "array2D[" << i << "][" << j << "]: " << &array2D[i][j] <<" " << array2D[i][j] << std::endl; } } return 0; }运行结果为:
array1D[0]: 012FFB90 1 array1D[1]: 012FFB94 2 array1D[2]: 012FFB98 3 array1D[3]: 012FFB9C 4 array1D[4]: 012FFBA0 5 array1D[5]: 012FFBA4 6 array1D[6]: 012FFBA8 7 array1D[7]: 012FFBAC 8 array1D[8]: 012FFBB0 9 二维数组的元素地址和值: array2D[0][0]: 012FFB64 1 array2D[0][1]: 012FFB68 2 array2D[0][2]: 012FFB6C 3 array2D[1][0]: 012FFB70 4 array2D[1][1]: 012FFB74 5 array2D[1][2]: 012FFB78 6 array2D[2][0]: 012FFB7C 7 array2D[2][1]: 012FFB80 8 array2D[2][2]: 012FFB84 9从结果中可以看到,在内存的存储方式上,一维数组和二维数组是相同的。对于程序里定义的二维数组来说,元素 array2D[0][2] 和元素 array2D[1][0] 是相邻的。
本文链接:http://task.lmcjl.com/news/15220.html