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

C语言指针实现迷宫遍历:如何判断指针对应的数组位置及出口

C语言迷宫遍历:指针位置与数组坐标的关联方案

方法1:通过指针偏移计算行列索引

C语言中二维数组以行优先顺序连续存储,可以通过当前指针与数组起始地址的偏移量,反推出对应的行和列索引:

假设迷宫定义为char maze[ROWS][COLS](ROWS=12,COLS=12),步骤如下:

  • 计算当前指针相对于数组首元素的偏移量:ptrdiff_t offset = position - &maze[0][0];
  • 行索引 = 总偏移量 / 每行元素个数:int row = offset / COLS;
  • 列索引 = 总偏移量 % 每行元素个数:int col = offset % COLS;

之后直接判断row == 4 && col == 11即可确认到达出口。

代码示例:

#include <stddef.h>

#define ROWS 12
#define COLS 12

void maze_traverse(char maze[ROWS][COLS], char *position) {
    // 计算当前位置的行列坐标
    ptrdiff_t offset = position - &maze[0][0];
    int row = offset / COLS;
    int col = offset % COLS;

    // 判断是否到达出口
    if (row == 4 && col == 11) {
        printf("已到达出口!\n");
        return;
    }

    // 递归遍历逻辑(标记已访问、尝试上下左右移动等)
    // ...
}

方法2:直接比较指针地址

如果出口位置固定为maze[4][11],可以直接获取该位置的地址,与当前position指针做地址比较,这是最直接的方式:

代码示例:

#define ROWS 12
#define COLS 12

void maze_traverse(char maze[ROWS][COLS], char *position) {
    // 直接对比指针地址判断是否到达出口
    if (position == &maze[4][11]) {
        printf("已到达出口!\n");
        return;
    }

    // 递归遍历逻辑
    // ...
}

注意事项

  • 确保二维数组的内存布局是连续的:C标准中二维数组的元素在内存中是连续排列的,maze[i][j]的地址等价于&maze[0][0] + i*COLS + j,因此偏移计算是可靠的。
  • 使用ptrdiff_t类型存储指针偏移量:这是标准库定义的专门用于表示指针差值的整数类型,能适配不同平台的位数,避免溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:27:23