即使传递函数,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()
内部对它的任何修改都与传入的原始参数无关(即 total
在 main()
).
您可以更改为按引用传递(然后不需要 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)
这被称为“数组到指针衰减”
我传递了一个函数来计算数组中所有数字的总和,但它输出为 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()
内部对它的任何修改都与传入的原始参数无关(即 total
在 main()
).
您可以更改为按引用传递(然后不需要 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)
这被称为“数组到指针衰减”