gpt4 book ai didi

c - 没有静态存储的移动平均线故障

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:31 24 4
gpt4 key购买 nike

代码片段:

#include <stdio.h>

int getAverage(int i, int array[]);

int main(void)
{
int array [] = {45, 42, 41, 40, 43, 45, 46, 47, 49, 45}; //not working
static int array [] = {45, 42, 41, 40, 43, 45, 46, 47, 49, 45}; //works fine
int i, average = 0;

for (i = 0; i < sizeof(array)/sizeof(int); i++)
average = getAverage(i, array);
printf("Promedio: %d\n", average);

return 0;
}

int getAverage(int i, int array[])
{
int c = (array[i]+array[i+1])/2;
return c;
}

我的问题是,如果我删除数组的 static,它会给我不正确的结果。为什么会这样?

更新

int main(void)
{
int array [] = {45, 42, 41, 40, 43, 45, 46, 47, 49, 45};
int i, average = 0;

for (i = 0; i < sizeof(array)/sizeof(int) - 1; i++)
average = (1 * array[i]) + (1.0 - 1) * average;
printf("Promedio: %d\n", average);

return 0;
}

我是用维基百科的公式做的

最佳答案

您在最后一次调用该函数时超出了数组的范围。 array[i+1] 将在 i 是最后一个索引时结束。

这会导致未定义的行为。当未定义的行为被触发时,任何事情都可能发生。

关于c - 没有静态存储的移动平均线故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32261951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com