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

C语言二维数组如何实现行顺序逆序(上下翻转)

二维数组行级上下翻转实现方案(C语言)

核心实现思路

你需要的是整行维度的逆序排列,不需要修改每行内部的元素顺序,核心逻辑为:将第i行和第总行数-1 -i行的完整数据直接交换,仅需遍历前一半行数即可完成操作,时间复杂度为O(n)(n为二维数组总元素数),原地交换方案无额外内存开销。

具体实现代码

场景1:静态二维数组(编译时确定行列数)

静态数组的行内存是连续分配的,直接通过memcpy交换整行数据即可:

#include <stdio.h>
#include <string.h>

int main() {
    // 原二维数组
    int arr[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    int rows = sizeof(arr) / sizeof(arr[0]); // 自动计算总行数
    int cols = sizeof(arr[0]) / sizeof(arr[0][0]); // 自动计算总列数
    int temp[cols]; // 临时存储一整行数据

    // 仅循环前一半行数,避免重复交换
    for (int i = 0; i < rows / 2; i++) {
        // 交换第i行和倒数第i+1行
        memcpy(temp, arr[i], cols * sizeof(int));
        memcpy(arr[i], arr[rows - 1 - i], cols * sizeof(int));
        memcpy(arr[rows - 1 - i], temp, cols * sizeof(int));
    }

    // 打印验证结果
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

场景2:动态指针型二维数组(运行时确定行列数)

动态申请的指针数组仅需交换行指针地址即可,无需复制整行数据,执行效率更高:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int rows = 3, cols = 3;
    // 动态申请二维数组
    int** arr = (int**)malloc(rows * sizeof(int*));
    for (int i = 0; i < rows; i++) {
        arr[i] = (int*)malloc(cols * sizeof(int));
    }
    // 初始化数组
    arr[0][0] = 1; arr[0][1] = 2; arr[0][2] = 3;
    arr[1][0] = 4; arr[1][1] = 5; arr[1][2] = 6;
    arr[2][0] = 7; arr[2][1] = 8; arr[2][2] = 9;

    // 直接交换行指针完成逆序
    for (int i = 0; i < rows / 2; i++) {
        int* temp = arr[i];
        arr[i] = arr[rows - 1 - i];
        arr[rows - 1 - i] = temp;
    }

    // 打印验证+释放内存
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
        free(arr[i]);
    }
    free(arr);
    return 0;
}

注意事项

  • 不要和行内元素反转逻辑混淆,行内反转需要遍历每行内部交换对应位置元素,本需求不需要修改行内元素顺序
  • 循环次数仅需到总行数的1/2即可,若遍历全部行数会把已经交换的行再次换回原始顺序
  • 如果不需要保留原数组,优先使用原地交换方案,无需额外申请内存存储新数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:48:02