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

C语言指针实现数组复制异常求助:输入5元素后输出错误

你的C语言数组复制程序的问题分析与修正

先梳理代码里的核心问题,再给出修正后的完整实现:

问题点梳理

  • 输出逻辑错误:最后循环打印时,你传给printf的是数组名brr,这是数组的首地址,并非当前要输出的元素,所以会输出地址值而非数组元素。正确应该用brr[i]或者指针形式*(q + i)。
  • 未用指针完成复制:题目要求用指针实现数组复制,但你当前用的是数组下标赋值,不符合要求,需要改成指针遍历的方式。
  • 主函数不标准:void main()不符合C标准,标准写法是int main(),并且需要返回return 0;。
  • 输入提示语义有误:循环里重复提示“Enter any 5 element=”,语义模糊,应该明确提示是第几个元素,避免用户困惑。
  • 非标准函数依赖:getch()是Windows平台专属的非标准函数,可替换为标准的getchar()。

修正后的代码

#include <stdio.h>

int main() {
    int arr[5], brr[5], *p, *q, i;
    p = arr;
    q = brr;

    // 用指针接收用户输入
    for (i = 0; i < 5; i++) {
        printf("Enter element %d: ", i + 1);
        scanf("%d", p + i);
    }

    // 用指针完成数组复制
    for (i = 0; i < 5; i++) {
        *(q + i) = *(p + i);
    }

    // 输出复制后的数组
    printf("Copied array elements are: ");
    for (i = 0; i < 5; i++) {
        printf("%d ", *(q + i));
    }
    printf("\n");

    getchar(); // 替换getch(),用于暂停程序查看输出
    return 0;
}

关键修改说明

  1. 指针复制实现:用*(q + i) = *(p + i)替代下标赋值,通过指针偏移访问数组元素,满足题目要求。
  2. 输出修正:打印时使用*(q + i)获取当前元素,同时调整输出格式,让元素显示更清晰。
  3. 主函数标准化:改成int main()并添加return 0;,符合C语言标准规范。
  4. 输入提示优化:明确提示输入第几个元素,提升用户体验。
  5. 替换非标准函数:用getchar()替代getch(),增强代码的可移植性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:20:50