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

C语言如何将大尺寸二维数组拆分为多个等规格小二维数组

二维数组分块拆分实现方法

你可以新增两层循环遍历每个分块的起始偏移位置,即可获取所有象限的内容,该逻辑也可以直接适配更大尺寸的数组拆分场景。


核心思路

先定义四个通用参数,适配所有可整除的拆分需求:

  • 原数组行数:ORIG_ROW,4x4场景下为4,28x28场景下为28
  • 原数组列数:ORIG_COL,4x4场景下为4,28x28场景下为28
  • 拆分后小分块行数:BLOCK_ROW,2x2场景下为2,14x14场景下为14
  • 拆分后小分块列数:BLOCK_COL,2x2场景下为2,14x14场景下为14

行方向总分块数为 ORIG_ROW / BLOCK_ROW,列方向总分块数为 ORIG_COL / BLOCK_COL,四层循环嵌套即可完成遍历:

  1. 第一层循环:遍历行方向的所有分块
  2. 第二层循环:遍历列方向的所有分块
  3. 第三层循环:遍历当前分块内的行元素
  4. 第四层循环:遍历当前分块内的列元素

4x4数组拆2x2分块代码示例

#include <stdio.h>
#define ORIG_ROW 4
#define ORIG_COL 4
#define BLOCK_ROW 2
#define BLOCK_COL 2

int main() {
    int disp[ORIG_ROW][ORIG_COL] = {{12,4,32,9}, {19,24,3,4},{1,26,3,8},{3,24,7,5}};
    // 外层两层循环遍历所有分块
    for(int block_r = 0; block_r < ORIG_ROW / BLOCK_ROW; block_r++) {
        for(int block_c = 0; block_c < ORIG_COL / BLOCK_COL; block_c++) {
            printf("第%d行第%d列的分块内容:\n", block_r + 1, block_c + 1);
            // 内层两层循环遍历分块内元素
            for(int i = 0; i < BLOCK_ROW; i++) {
                for(int j = 0; j < BLOCK_COL; j++) {
                    // 计算实际访问的原数组下标
                    int real_r = block_r * BLOCK_ROW + i;
                    int real_c = block_c * BLOCK_COL + j;
                    printf("%d ", disp[real_r][real_c]);
                }
                printf("\n");
            }
            printf("---------------\n");
        }
    }
    return 0;
}

运行上述代码会依次输出4个2x2分块的全部内容,包含你需要的另外三个象限的元素。


大尺寸数组适配

如果是28x28数组拆分为14x14数组的场景,仅需要修改开头的宏定义即可,不需要调整循环逻辑:

#define ORIG_ROW 28
#define ORIG_COL 28
#define BLOCK_ROW 14
#define BLOCK_COL 14

如果原数组尺寸不是分块尺寸的整数倍,可以按需对原数组边缘补零、或者直接舍弃不满足尺寸的边缘部分即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:45:04