即使传递函数,C++ 初始化变量仍打印为零

C++ Initialized Variable Keeps Printing out as Zero Even though Function is Passed

我传递了一个函数来计算数组中所有数字的总和,但它输出为 0,这是我将其初始化的值。该函数位于与实际程序不同的文件中(我还创建了一个名为 Stats 的 class)。当我在函数中显示总和时,它显示了正确的数字。只有当我将它初始化为 0 时,它才会出错。当我传递函数时,如何才能使总数实际更新为正确的数量而不是零。

const int num = 12;
class Stats
{
private:
    double stats[num];
    double total = 0;
public:
    void setValue(double stats[num], int);
    double calcTotal(double stats[num], double);

};

double Stats::calcTotal(double stats[num], double total)
{
    total = 0;
    for (int i = 0; i < num; i++)
    {
        total += stats[i];
    }
    cout << total;
    return total;
}

int main()
{
    double rainFall[num];
    double total = 0;

    Stats rainStats;

    for (int i = 0; i < num; i++)
    {
        cout << "What was the rain fall for month #" << i + 1 << " ?" << endl;
        cin >> rainFall[i];
        rainStats.setValue(rainFall, num);
    }

    rainStats.calcTotal(rainFall, total);
    cout << total;
    return 0;
}

它在 int main() 中打印出 0 但在 calcTotal 中它是正确的数量。

total 是按值传递的,所以它只是参数的一个副本,在 calcTotal() 内部对它的任何修改都与传入的原始参数无关(即 totalmain()).

您可以更改为按引用传递(然后不需要 return 值)。

void calcTotal(double stats[num], double&);

或在 main() 中使用 return 值。

total = rainStats.calcTotal(rainFall, total);

跟进 。您必须将 total 的值重新分配给从 calcTotal() 返回的值,如下所示:

total = rainStats.calcTotal(rainFall, total);

它这样做是因为你没有给 num my friend 任何值

您的函数签名令人困惑(尽管语法正确):

double Stats::calcTotal(double stats[num], double total)

这意味着该函数将接收一个 num 元素的数组,并且您在循环中使用该 num 作为限制。

其实就是用全局变量const int num = 12;作为循环限制,你的声明和

是一样的
double Stats::calcTotal(double stats[], double total)

double Stats::calcTotal(double* stats, double total)

这被称为“数组到指针衰减”