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
相关产品推荐
相关产品推荐

