gpt4 book ai didi

c++ - 当我尝试函数重载时数组获得垃圾值

转载 作者:太空宇宙 更新时间:2023-11-04 12:48:45 25 4
gpt4 key购买 nike

我正在尝试使用两个名称相同的函数来计算 2 个数字数组(一个类型为“float”,另一个类型为“int”)的算术平均值。出于某种原因,当我运行完整程序时,其中一个数组为我提供了均值垃圾值。代码如下所示 -

#include <iostream>
using namespace std;
// function declarations
float Mean (float[ ], int);
float Mean (int[ ], int);
//float SD (int[ ], int);
//float SD (float[ ], int size = 15);

int main( )
{
int Fib [15] = {0}; //declare and initialize the Fibonacci array
float Array[100] = {1.0,0.0}; //declare and initialize the floating point array

int sizeFib = sizeof(Fib)/sizeof(int);
int sizeArray = sizeof(Array)/sizeof(float);

//set float precision
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);

//generate the Fibonacci array
Fib[0] = 0; //by definition
Fib[1] = 1; //by definition
for (int i = 2; i < 15; ++i)
Fib[i] = Fib[i-2] + Fib[i-1];

//generate the floating point array
for (int j = 0; j < 100; ++j)
Array [j + 1] = Array[j] + 1 ;

//for (int k = 0; k < sizeArray; ++k)
//cout << Array[k]<< endl;

cout << "The Arithmetic Mean of the Floating point Array is :" << Mean(Array, sizeArray) << endl;
cout << "The Arithmetic Mean of the Fibonacci Array is :" << Mean(Fib, sizeFib) << endl;

return 0;
}

//function definitions
float Mean (int array[ ], int size)
{
int sum = 0;
float mean;
for (int i = 0; i < size; ++i)
{
sum += array[i];
}
mean = sum / size;
return mean;
}

float Mean (float array[ ], int size)
{
int sum = 0;
float mean;
for (int i = 0; i < size; ++i)
{
sum += array[i];
}
mean = sum / size;
return mean;
}

我运行时得到的输出是 -

float 组的算术平均值是:50.00

斐波那契数列的算术平均值为:74702368.00

为什么斐波那契数组会失效?

最佳答案

错误在这段代码中:

for (int j = 0; j < 100; ++j)
Array [j + 1] = Array[j] + 1 ;

此循环的最后一次迭代将尝试将 Array[100] 设置为浮点值。但这超出了数组的范围,它实际上似乎是将 Fib 数组的 first 元素设置为该值! (我猜编译器选择将 Fib 数组紧跟在内存中的 Array 数组之后。)

由于 Fib 数组包含整数,而这是写入一个浮点值,您最终会得到一个巨大的整数,当它被解释为 int 时看起来像垃圾.具体来说,float 100.0 被解释为 int 1120403456(因为这些值在内存中具有相同的位表示)。

我建议生成 Array 数组的方式与生成 Fib 数组的方式类似,方法是定义数组的第一个值,然后设置其余每个值基于之前的值:

Array[0] = 0;
for (int j = 1; j < 100; ++j)
Array[j] = Array[j - 1] + 1;

关于c++ - 当我尝试函数重载时数组获得垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50082389/

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