如何通过指针在C语言函数中修改嵌套char数组
使用指针在函数中修改C语言二维字符数组
方法1:类型安全的行指针遍历
这种方法保留二维数组的类型信息,确保访问元素时符合数组维度定义,避免越界风险。
#include <stdio.h> #define ROW 10 #define COLUMN 20 // 函数接收指向COLUMN长度字符数组的指针,以及行数 void clearMap(char (*map)[COLUMN], int rows) { char (*rowPtr)[COLUMN] = map; // 指向当前行的指针 while (rowPtr < map + rows) { // 遍历所有行 char *charPtr = *rowPtr; // 指向当前行内的字符 while (charPtr < *rowPtr + COLUMN) { // 遍历当前行的所有字符 if (*charPtr != '0') { *charPtr = ' '; // 替换非'0'字符为空格 } charPtr++; // 移动到下一个字符 } rowPtr++; // 移动到下一行 } } int main() { char MAP[ROW][COLUMN] = { "00000000000000000000", "0 0", "0 0", "0 0", "0 0", "0 0", "0 0", "0 0", "0 0", "00000000000000000000", }; // 调用函数完成修改 clearMap(MAP, ROW); // 验证结果(可选) for (int y = 0; y < ROW; y++) { printf("%s\n", MAP[y]); } return 0; }
方法2:扁平化指针遍历
二维数组在内存中连续存储,可将其视为一维字符数组,用单个指针遍历所有元素:
#include <stdio.h> #define ROW 10 #define COLUMN 20 // 函数接收字符指针和总元素数 void clearMap(char *map, int totalElements) { char *ptr = map; while (ptr < map + totalElements) { if (*ptr != '0') { *ptr = ' '; } ptr++; } } int main() { char MAP[ROW][COLUMN] = { "00000000000000000000", "0 0", "0 0", "0 0", "0 0", "0 0", "0 0", "0 0", "0 0", "00000000000000000000", }; // 调用时将二维数组转为字符指针,传入总元素数 clearMap((char*)MAP, ROW * COLUMN); // 验证结果(可选) for (int y = 0; y < ROW; y++) { printf("%s\n", MAP[y]); } return 0; }
两种方法对比
- 方法1:类型安全,编译器会检查数组维度匹配性,适合固定维度的数组。
- 方法2:简洁灵活,无需依赖编译期已知的列数,但需手动计算总元素数,强制类型转换会丢失类型检查,需确保内存布局正确。
内容的提问来源于stack exchange,提问作者Doğukan AL
相关产品推荐
相关产品推荐

