通过引用传递变量

时间:2016-02-14 18:49:29

标签: c++ reference void

#include <iostream>
#include <iomanip>

using namespace std; 

void getSales(int sales);

int main()
{
    //declare variables
    int sales = 0;
    double commission = 0.0;

    //enter input 
    getSales(sales);

    //determine comission
    if (sales < 0)
        commission = -1;
    else if (sales <= 100000)
        commission = sales * .02;
    else if (sales <= 400000)
        commission = (sales - 100000) * .05 + 2000;
    else
        commission = (sales - 400000) * .1 + 17000;

    //display commission error message
    if (commission != -1)
    {
        cout << fixed << setprecision(2);
        cout << "Comission: $" << commission << endl;
    }
    else
        cout << "The sales cannot be less than 0." << endl;

    return 0;
}

//pass variable by reference
void getSales(int sales)
{
    cout << "Sales: ";
    cin >> sales;
}

好吧,所以我一直试图了解按值和引用传递变量之间的区别。在这种情况下,我试图通过引用使用void getSales进行简单的传递,但是我的程序实际上并没有调用我的算法。因此,每次我输入销售时,都不会使用我的算法打印结果。我没有很好的传递价值观,所以任何帮助都会受到赞赏,所以我知道我在这里失踪了什么。

非常感谢!

4 个答案:

答案 0 :(得分:0)

将值传递给函数的按值调用方法将参数的实际值复制到函数的形式参数中。

将参数传递给函数的按引用调用方法将参数的引用复制到形式参数中。在函数内部,引用用于访问调用中使用的实际参数。

void getSales(int sales)
{
    //call by value function
}

void getSales(int &sales)
{
    //call by reference function
}

答案 1 :(得分:0)

//pass variable by reference
void getSales(int sales)
{
}

不通过引用传递参数,而是通过值传递

要通过引用传递 ,请使用类型为

的引用说明符
void getSales(int& sales)
              // ^
{
}

答案 2 :(得分:0)

通过引用传递类似于传递指针(除了引用无法重新定位),这意味着您调用的函数不会获取传递值的副本但访问传递的值来自呼叫者范围。 要通过引用传递,您必须添加&符号&amp;&#39;到getSales函数中的类型。现在看来,你正在通过值传递int而不是&#39; int&amp;&#39;会通过引用传递。就像&#39; int *&#39;会通过指针传递。

答案 3 :(得分:0)

我猜你的问题已经得到了解答,但为什么你要将这个值作为void函数的参数返回而不是简单地声明

int getSales();

我认为输出参数应该只作为最后的手段使用。他们倾向于使代码难以阅读。