You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中如何创建并访问包含二维数组的多维数组?

在C语言中创建并访问嵌套二维数组的多维数组

C语言完全支持这类包含二维数组的多维数组(本质是三维或更高维数组),下面直接结合你要的「两个3×3数组」的需求,讲具体创建、访问方法:

一、创建多维数组的两种方式

1. 静态声明(编译时分配内存)

如果需要固定数量的二维数组,直接声明三维数组即可。存储2个3×3的二维数组,写法如下:

// 格式:类型 数组名[外层元素数][二维数组行数][二维数组列数]
int arr[2][3][3];

可以直接初始化赋值,让结构更清晰:

int arr[2][3][3] = {
    // 第一个3×3数组
    { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} },
    // 第二个3×3数组
    { {10, 11, 12}, {13, 14, 15}, {16, 17, 18} }
};

如果你坚持要「1×2」的外层数组(即外层是1行2列的结构),可以写成四维数组,但这个外层的1没有实际意义,通常没必要:

int arr[1][2][3][3];

2. 动态分配(运行时分配内存)

如果需要根据程序逻辑调整数组数量,用指针配合malloc实现:

#include <stdlib.h>

// 声明指向3×3二维数组的指针,分配2个这样的数组内存
int (*arr)[3][3] = malloc(2 * sizeof(*arr));

// 使用完成后记得释放内存
free(arr);

二、访问内部二维数组的[i,j]元素

假设x是目标二维数组在外层数组中的索引(如果是1×2的外层数组,x=0,y为0或1),访问逻辑如下:

  • 对于三维数组arr[2][3][3]:第x个二维数组的[i,j]元素 → arr[x][i][j]
  • 对于四维数组arr[1][2][3][3]:第x行y列的二维数组的[i,j]元素 → arr[x][y][i][j]

举实际例子:

// 取第一个3×3数组的第1行第2列元素(值为6)
int val1 = arr[0][1][2];
// 取第二个3×3数组的第2行第0列元素(值为16)
int val2 = arr[1][2][0];

三、循环遍历示例(用于循环/条件判断)

如果要遍历所有元素,写三层循环即可,也可以在循环中加入条件判断:

int arr[2][3][3] = {
    { {1,2,3}, {4,5,6}, {7,8,9} },
    { {10,11,12}, {13,14,15}, {16,17,18} }
};

// 遍历每个外层的二维数组
for (int x = 0; x < 2; x++) {
    printf("第%d个3×3数组:\n", x+1);
    // 遍历当前二维数组的行
    for (int i = 0; i < 3; i++) {
        // 遍历当前行的列
        for (int j = 0; j < 3; j++) {
            // 示例:对大于10的元素标记输出
            if (arr[x][i][j] > 10) {
                printf("*%d ", arr[x][i][j]);
            } else {
                printf("%d ", arr[x][i][j]);
            }
        }
        printf("\n");
    }
}

四、注意事项

  • 数组维度顺序不要搞反:C语言中数组维度是从外向内定义的,arr[a][b][c]表示a个b×c的二维数组。
  • 指针声明要准确:动态分配时,int (*arr)[3][3]是指向3×3二维数组的指针,别写成int *arr[3][3](这是存储指针的二维数组,完全不是一回事)。

内容的提问来源于stack exchange,提问作者rom1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:40:39