浮点值给出随机值

float value gives random value

#include <stdio.h>


float average(float arr[], int n)
{ 
  float sum ;
  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;
}

你好,我在学校学c,就遇到了这种奇怪的情况。 我想编写一个函数来获取长度为 n 的浮点数组并输出数字的平均值。 我正在使用两种不同的文本编辑器进行测试,一种是 VSC 和 repl.it 在线。 我得到

0x7ffe72970cc0
1.000000
1.000000
0x7ffe72970cc4
2.000000
3.000000
0x7ffe72970cc8
3.000000
6.000000
0x7ffe72970ccc
4.000000
10.000000
0x7ffe72970cd0
5.000000
15.000000
3.000000 is the average.

与repl.it,但当我使用 VSC 时, 我得到

0x7ffeeab1b770
1.000000
-107423728669532035777298432.000000
0x7ffeeab1b774
2.000000
-107423728669532035777298432.000000
0x7ffeeab1b778
3.000000
-107423728669532035777298432.000000
0x7ffeeab1b77c
4.000000
-107423728669532035777298432.000000
0x7ffeeab1b780
5.000000
-107423728669532035777298432.000000
-21484745272737805312720896.000000 is the average.

这个。 我的代码有什么错误的地方吗?为什么这两者不同? 感谢任何反馈,谢谢!

你需要在声明时将sum变量初始化为零,像这样:

float sum = 0;

还有几件事:

如果您使用以下值初始化数组,则不需要数组大小:

float arr1[5] = {1,2,3,4,5};

相当于:

float arr1[] = {1, 2, 3, 4, 5};

此外,除了传递 5 作为数组大小,您还可以传递:

sizeof(arr1)/sizeof(float)

无论元素数量如何,它始终是正确的大小。

在大多数 C 编译器中,未初始化变量的值是垃圾。当你说 int x;,它实际上做了什么,它将内存定位在某个地址。它不对 x 的值进行 任何 种初始化,因此 x 现在包含一些以前存在的值(垃圾)。

似乎 repl.it 正在将默认初始化为 0;我不推荐使用这种编译器,因为它会阻止你真正理解 C 是如何工作的。