为什么num1
的值等于0?我不明白。如何将num1
传递到getScore
函数并使用cin
并不会更改值?如何根据cin
到score
的内容更改其值。
#include <iostream>
using namespace std;
void getScore(double);
int main(int argc, const char * argv[]) {
double num1;
getScore(num1);
cout << "NUM 1 got set to " << num1 << endl;
return 0;
}
void getScore(double score) {
cout << "whats the score";
cin >> score;
cout << "num is " << score << endl;
}
答案 0 :(得分:5)
您按价值通过了num1
。这意味着score
是一个新变量,其中num1
的值已复制到其中。
您可能希望在此处发生的是通过引用传递num1
。这是通过声明和定义函数来完成的:
void getScore(double&);
void getScore(double& score) {
cout << "whats the score";
cin >> score;
cout << "num is " << score << endl;
}
&符号(&amp;)表示您传递对变量的引用,而不是存储在变量中的值的副本。通过引用,score
成为一种昵称&#39;为num1
。这意味着将值设置为score
会将该值设置为num1
。
http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/
答案 1 :(得分:2)
函数通常被理解为对值的评估。考虑到这一点,您可以将您的功能重写为:
double getScore(){ // crap and other stuff... + a return }
要访问函数中return语句产生的值,只需指定它即可。
double theInputtedScore = getScore();
此功能将满足之前的分配。
double getScore(){ return 2.71; }
写作时
getScore(double value).
这通常被理解为数值是函数的输入。你不想要那个。
答案 2 :(得分:2)
当您按值传递参数时(就像您在此处一样),函数会为其自身创建一个副本,因此您将在getScore()中写入本地副本,并在函数结束时销毁该副本。