使用void函数设置main函数中变量的值

时间:2017-10-12 22:01:16

标签: c++

为什么num1的值等于0?我不明白。如何将num1传递到getScore函数并使用cin并不会更改值?如何根据cinscore的内容更改其值。

#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;
}

3 个答案:

答案 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()中写入本地副本,并在函数结束时销毁该副本。

请参阅Passing arguments by value