C语言作业:数组表示法转纯指针表示法的实现疑问
纯指针表示法改造方案(针对C语言项目要求)
核心规则明确
教授要求的纯指针表示法严格遵循:
- 禁止数组下标写法(如
arr[i]) - 禁止指针加固定偏移的写法(如
*(random + 40)) - 必须通过指针自身的移动(
ptr++/ptr--)定位元素,再用*ptr解引用访问/赋值
常见痛点改造示例
1. 替换*(random + 41 - 1) = '\0';这类偏移写法
原写法是直接通过指针偏移定位到数组第41个元素(下标40),要改成纯指针移动:
// 保留原指针的初始位置,用临时指针操作 char *temp_rand = random; // 移动40次,到达目标元素位置(从首元素开始,第40次自增后指向第41个元素) for (int i = 0; i < 40; i++) { temp_rand++; } // 解引用赋值 *temp_rand = '\0';
如果不想用循环,也可以用连续自增(但循环更清晰,符合教授要求的指针移动逻辑):
char *temp_rand = random; temp_rand++; temp_rand++; ... // 连续写40次(不推荐,循环更易维护) *temp_rand = '\0';
2. int指针操作数组(教授要求的s2实现方式)
假设原代码中s2是int数组,比如int s2[10];,改造为纯指针操作:
int s2[10]; // 定义int指针指向数组首元素 int *s2_ptr = s2; // 给数组第1个元素赋值(原s2[0]) *s2_ptr = 100; // 移动指针到第2个元素(原s2[1]) s2_ptr++; *s2_ptr = 200; // 再移动到第3个元素(原s2[2]) s2_ptr++; *s2_ptr = 300; // 如果需要回到数组开头,直接重置指针 s2_ptr = s2;
如果要批量赋值或遍历,用循环控制指针移动:
int *s2_ptr = s2; for (int i = 0; i < 10; i++) { *s2_ptr = i * 10; // 赋值当前指针指向的元素 s2_ptr++; // 移动到下一个元素 }
完整改造示例(模拟原代码场景)
原代码(不符合要求的写法)
#include <stdio.h> int main() { char random[41]; int nums[5]; // 给random最后一个元素加结束符 *(random + 40) = '\0'; // 给nums数组赋值 nums[0] = 1; nums[1] = 2; nums[2] = 3; nums[3] = 4; nums[4] = 5; return 0; }
改造后代码(纯指针表示法)
#include <stdio.h> int main() { char random[41]; int nums[5]; // 处理random的结束符 char *temp_rand = random; for (int i = 0; i < 40; i++) { temp_rand++; } *temp_rand = '\0'; // 处理nums数组赋值 int *num_ptr = nums; *num_ptr = 1; num_ptr++; *num_ptr = 2; num_ptr++; *num_ptr = 3; num_ptr++; *num_ptr = 4; num_ptr++; *num_ptr = 5; return 0; }
内容的提问来源于stack exchange,提问作者user20544996
相关产品推荐
相关产品推荐

