跳至主要內容

4-二维数组

黑静美原创...大约 2 分钟编程CcppC井

二维数组的概念

二维数组是数组的数组,可以认为是一个表格。也可以吧二维数组看成国际象棋棋盘、城市街区等的网络。

arr[0][0]arr[0][1]arr[0][2]arr[0][3]
arr[1][0]arr[1][1]arr[1][2]arr[1][3]
arr[2][0]arr[2][1]arr[2][2]arr[2][3]

以上为3 X 4的二维表格

二维数组的声明

二维数组声明需要给出行数和列数

比如:

int a[2][3];

嵌套花括号{}用于逐行初始化元素,如下:

int a[2][3]={
    {3,2,6},
    {4,5,20}
};

也可以采用以下形式

int a[2][3]={{3,2,6},{4,5,20}};

:::tips 前者提供了更清晰的可视化阵列结构 :::


打印数组:

#include <stdio.h>

void  print_arr(int rows, int cols, int x[2][3]);

int main() {
    int a[2][3]={
            {3,2,6},
            {4,5,20}
    };
    print_arr(2, 3, a);
    return 0;
}

void  print_arr(int rows, int cols, int x[2][3]){
    for(int i = 0; i < rows; i++){
        for(int j = 0; j < cols; j ++ ){
            printf("%d",x[i][j]);
            if (j != cols - 1){
                printf("    ");
            }
        }
        printf("\n");
    }
}

⚠️注意

一个数组可以有两个以上的维度

例如:

#include <stdio.h>

int main() {
    // 声明并初始化一个三维数组
    int a[5][3][4] = {
        {
            {1, 2, 3, 4},
            {5, 6, 7, 8},
            {9, 10, 11, 12}
        },
        {
            {13, 14, 15, 16},
            {17, 18, 19, 20},
            {21, 22, 23, 24}
        },
        // ... 可以继续添加更多的初始化值
    };

    // 以示例方式打印数组中的某个值
    printf("a[1][2][3] = %d\n", a[1][2][3]);  // 输出: a[1][2][3] = 24

    return 0;
}

:::tips a[5][3][4] 是一个有 5 个元素的数组,每个元素存储 3 个元素,且这三个元素的每个元素又存储 4 个元素。 :::

填空,下面二维数组有多少个元素?

int arr[2][5];

2 x 5 = 10

访问二维数组

要访问二维数组的元素,需要行索引和列索引。

例如,以下语句打印元素的值,然后分配一个新值:

#include <stdio.h>

int main() {
    int a[2][3]={
            {3,2,6},
            {4,5,20}
    };
    printf("Element 3 in row 2 is %d\n", a[1][2]); /*20*/
    a[1][2] = 25;
    printf("The new element 3 in row 2 is %d\n", a[1][2]); /*25*/
    return 0;
}


就像 for 循环遍历一维数组一样,嵌套的 for 循环用来遍历二维数组

#include <stdio.h>

int main() {
    int a[2][3] = {
            {3, 2, 6},
            {4, 5, 20}
    };

    int k, j;
    /* 打印数组内容 */
    for (k = 0; k < 2; k++) {
        for (j = 0; j < 3; j++) {
            printf(" %d", a[k][j]);
        }
        printf("\n");
    }

    return 0;
}

求和:

#include <stdio.h>

int sum_fn(int row, int col, int x[2][3]); //todo 注意二维数值的声明

int main() {
    int a[2][3] = {
        {3, 2, 6},
        {4, 5, 20}
    };

    printf("Sum:%d", sum_fn(2, 3, a));
    return 0;
}

int sum_fn(int row, int col, int x[2][3]){
    int sum = 0;
    for(int i = 0; i < row; i++){
        for(int j = 0; j < col; j++){
            sum += x[i][j];
        }
    }
    return sum;
}

练习:数组旋转

上次编辑于:
贡献者: Heijingmei
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3