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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:01:11