了解参考变量的工作原理

时间:2013-03-03 20:21:32

标签: c++ pointers pass-by-reference void

  

好吧,我遇到了如何从void类型中提取值以使用引用变量将其恢复为main的问题。我已经多次阅读了我的教科书中的部分,但代码剪断它给我的意义不大,而且它们并不是很多。有人可能会解释,或者给出一个简单的代码示例吗?

     

由于

这是我的代码,应该发生的是我应该使用我的main调用的第一个函数从用户那里得到5个测试分数。 main调用的下一个函数应该调用第三个函数,该函数确定最低的测试分数并将其从中间函数的计算中删除。

我尝试运行代码(仅使用文本存根和变量而不进行计算),但我的变量都显示为可以达到的最大数量,而不是用户输入它们被显示为。

#include <iostream>
#include <cmath>
#include <string>

using namespace std;

int main()
{
double score1, score2, score3, score4, score5, average;

void getScore(double &);
void calcAverage(double &);
int findLowest();

getScore(score1);
getScore(score2);
getScore(score3);
getScore(score4);
getScore(score5);

calcAverage(average);

cout<<"Let's see what we have here.\n"            <<score1<<endl<<score2<<endl<<score3<<endl<<score4<<endl<<score5<<endl<<average;
system("pause");
return 0;
}

void getScore(double &)
{
double score;

cout<<"Please enter a test score.";
    cin>>score;
    while(score<0 || score>100)
    {
        cout<<"Please enter a valid score.";
        cin>>score;
    }
}

void calcAverage(double &)
{
int findLowest();
double lowest;

cout<<"Yes, I'm a stub.";
lowest = findLowest();
}

int findLowest()
{
cout<<"I'm a stub too!";
return 5;
}

3 个答案:

答案 0 :(得分:1)

你的功能应该是这样写的:

void getScore(double &refScore) //!!
{
    //double score;

    cout<<"Please enter a test score.";

    cin>>refScore;
    while(refScore<0 || refScore>100)
    {
        cout<<"Please enter a valid score.";
        cin>>refScore;
    }
}

我想你明白了......

答案 1 :(得分:0)

我认为解释references概念的最佳方式是将引用视为别名。这不是100%的真实,但对于初学者来说这是一个非常好的寓言。

无论您对引用做了什么,也都会对原始对象进行。

所以你要做的就是为同一个变量定义一个替代名称。

答案 2 :(得分:0)

引用是现有对象的另一个名称(别名),因此只能引用现有对象(必须初始化)并且不能重新分配给其他对象。 const指针满足这些条件,编译器使用它来表示引用。 希望很清楚。