跳转至

4.5 二维数组(选学)

这些内容在函数学完、指针学完之后,还会有更深入的理解。现在可以先了解基础概念。

二维数组就是"一维数组的数组"——最适合描述表格/矩阵数据。

声明方式

int scores[5][3] = {         // 5行3列
    {90, 85, 92},            // 第0行
    {88, 79, 95},            // 第1行
    {78, 90, 85},            // 第2行
    {92, 88, 90},            // 第3行
    {85, 80, 88}             // 第4行
};

⚠️ 列数不能省略! int arr[][3] ✅ 但 int arr[3][]

下标规则

scores[0][0]   // 第0行第0列
scores[1][2]   // 第1行第2列

第一个下标是行,第二个是列,都是从0开始。

双重for循环遍历

int rows = 5, cols = 3;

// 行优先遍历(外层行→内层列)
for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
        printf("%d ", scores[i][j]);
    }
}

// 列优先遍历(外层列→内层行)
for (int j = 0; j < cols; j++) {
    for (int i = 0; i < rows; i++) {
        printf("%d ", scores[i][j]);
    }
}

sizeof 算行数和列数

int arr[3][4];

int rows = sizeof(arr) / sizeof(arr[0]);          // 行数:48÷16=3
int cols = sizeof(arr[0]) / sizeof(arr[0][0]);    // 列数:16÷4=4