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

C语言求float数组平均值不同平台运行结果异常问题求助

问题解答

核心代码错误

你代码中average函数内的sum变量仅做了声明,没有初始化初始值。C语言中函数内部定义的局部自动变量,不会被自动初始化为0,它的初始值完全取决于声明变量时对应内存地址上遗留的历史数据,属于未定义行为。

跨平台结果差异的原因

未定义行为的执行结果没有任何标准约束:

  • repl.it平台的运行环境中,sum对应的内存地址刚好遗留的数值是0,累加过程符合预期,最终得到了正确的平均值
  • VS Code对应的本地运行环境中,sum对应的内存地址遗留的是一个极大的负数,后续所有累加操作都基于这个错误的初始值计算,自然得到了异常结果

修复方案

仅需修改sum的声明行,给它赋初始值0即可:

#include <stdio.h>


float average(float arr[], int n)
{ 
  float sum = 0.0f; // 修复:初始化sum为0
  for (int i = 0; i<n; i++){
    sum = sum+arr[i];
    
    printf("%p\n", arr+i);
    printf("%f\n", arr[i]);
    printf("%f\n",sum );
  }
  return sum/n;

}

int main() {
  
    float arr1[5] = {1,2,3,4,5};
    printf("%f is the average.\n",average(arr1, 5));
  
  
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:36:00