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; }
关键修改说明
- 指针复制实现:用
*(q + i) = *(p + i)替代下标赋值,通过指针偏移访问数组元素,满足题目要求。 - 输出修正:打印时使用
*(q + i)获取当前元素,同时调整输出格式,让元素显示更清晰。 - 主函数标准化:改成
int main()并添加return 0;,符合C语言标准规范。 - 输入提示优化:明确提示输入第几个元素,提升用户体验。
- 替换非标准函数:用
getchar()替代getch(),增强代码的可移植性。
内容的提问来源于stack exchange,提问作者Musing_soul
相关产品推荐
相关产品推荐

