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

使用指针算术实现用户输入数字求和的代码结果恒为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. 先把上面的正确代码跑一遍,输入1、2、3、4、5,应该输出15,确认逻辑没问题。
  2. 对比你的代码,重点看输入部分的scanf参数是不是正确的数组元素地址。
  3. 检查sum_array里的总和变量有没有初始化为0,以及指针遍历的循环条件和移动逻辑是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:43:45