一、二维数组是什么可以理解为数组里面套数组→ 类似表格 / 矩阵一维一行数据二维多行多列下标依然从0 开始二、二维数组定义与初始化1. 标准写法// 2行3列 int arr[2][3] { {1, 2, 3}, {4, 5, 6} };2. 简写不推荐可读性差int arr[2][3] {1,2,3,4,5,6};3. 部分初始化其余自动为 0int arr[2][3] { {1}, {4} }; // 结果 // 1 0 0 // 4 0 04. 可以省略行数不能省略列数int arr[][3] {1,2,3,4,5,6};三、二维数组遍历双层 for 循环外层循环行内层循环列#include iostream using namespace std; int main() { int arr[2][3] { {1, 2, 3}, {4, 5, 6} }; // 遍历 for (int i 0; i 2; i) { // 行 for (int j 0; j 3; j) { // 列 cout arr[i][j] \t; } cout endl; } system(pause); return 0; }运行结果1 2 3 4 5 6 请按任意键继续...四、二维数组求行列数// 总字节数 int total sizeof(arr); // 一行的字节数 int rowBytes sizeof(arr[0]); // 行数 int rows total / rowBytes; // 列数 int cols rowBytes / sizeof(arr[0][0]);以后无论数组多大循环都能通用。五、字符数组C 风格字符串字符串本质以 \0 结尾的字符数组1. 定义字符串// 自动补 \0 结束符 char str[] hello;等价于char str[] {h,e,l,l,o,\0};2. 输出与输入char str[20]; cin str; // 输入不能有空格 cout str; // 输出直到 \0 停止3. 注意点没有\0会乱码数组长度要比实际字符多 1cin遇到空格会截断六、一维 / 二维 / 字符数组 对比总结类型结构典型用法遍历方式一维数组线性一串数据成绩、数列单层 for二维数组行列矩阵地图、表格双层 for字符数组char 数组 \0字符串逐个输出 / 直接 cout七、实战小案例输出杨辉三角前 4 行int yh[4][4] {0}; for (int i 0; i 4; i) { yh[i][0] 1; yh[i][i] 1; for (int j 1; j i; j) { yh[i][j] yh[i-1][j-1] yh[i-1][j]; } } // 打印 for (int i 0; i 4; i) { for (int j 0; j i; j) { cout yh[i][j] ; } cout endl; }输出plaintext1 1 1 1 2 1 1 3 3 1八、新手高频坑点二维数组下标写反arr[j][i]循环越界i rows字符数组忘记留位置给\0直接用给数组整体赋值不行字符数组用双引号 / 单引号混用九、今日重点总结二维数组 数组的数组双层 for 遍历行数 sizeof(arr)/sizeof(arr[0])字符数组必须以\0结尾才是合法字符串数组下标一律从 0 开始严禁越界数组不能整体赋值只能逐个拷贝