使用指针算术实现用户输入数字求和的代码结果恒为0,求技术帮助
用指针算术实现数组求和的问题排查与修复
嘿,咱们来搞定你的指针求和总是返回0的问题!这种情况我碰到过好多次,大概率是输入或者指针遍历的逻辑出了小问题,咱们一步步来分析。
首先你提供的代码片段不完整,但根据描述和常见的错误场景,最可能的原因集中在输入未正确写入数组或者指针遍历逻辑错误上,咱们先看正确的实现,再对比排查你的问题。
正确的完整实现代码
先给你一个能正常运行的版本,你可以对照自己的代码找差异:
#include<stdio.h> #define N 5 // 用指针算术计算数组总和,不使用下标 int sum_array(const int *p, int n) { int total = 0; // 方式1:用指针偏移遍历 for (int i = 0; i < n; i++) { total += *(p + i); // 通过p+i计算第i个元素的地址,再取值 } // 方式2:用指针自增遍历(二选一即可) // const int *temp_ptr = p; // while (n-- > 0) { // total += *temp_ptr; // temp_ptr++; // 指针自增,移动到下一个元素 // } return total; } int main() { int arr[N]; int *input_ptr = arr; // 指向数组首元素的指针 printf("请输入%d个整数:\n", N); // 用指针算术接收用户输入 for (int i = 0; i < N; i++) { scanf("%d", input_ptr + i); // 直接传入第i个元素的地址 // 或者用自增方式: // scanf("%d", input_ptr); // input_ptr++; } int total = sum_array(arr, N); printf("输入数字的总和为:%d\n", total); return 0; }
你的代码最可能的错误点
我猜你大概率是在输入环节出了问题,导致数组里的元素全是默认的0,求和自然返回0:
- 错误示例:如果输入时你写了
scanf("%d", &input_ptr);,这就错了!input_ptr本身就是数组元素的地址,不需要再加&,加了之后你是把输入值写到了指针变量自己的地址里,根本没写到数组里,数组元素还是初始的0值。 - 另外检查
sum_array里的总和变量有没有初始化:如果total没设为0,会是随机值,但你说总和几乎总是0,这个可能性低,但也要确认。 - 指针遍历逻辑:如果你用指针自增的方式,有没有用临时指针?比如如果直接修改了参数
p(因为它是const的,编译器会报错,但如果没加const的话,可能会导致指针越界或者没遍历全)。
排查步骤
- 先把上面的正确代码跑一遍,输入1、2、3、4、5,应该输出15,确认逻辑没问题。
- 对比你的代码,重点看输入部分的
scanf参数是不是正确的数组元素地址。 - 检查
sum_array里的总和变量有没有初始化为0,以及指针遍历的循环条件和移动逻辑是否正确。
内容的提问来源于stack exchange,提问作者Tumul Kumar
相关产品推荐
相关产品推荐

