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
相关产品推荐
相关产品推荐

