【问题标题】:passing a variable by reference通过引用传递变量
【发布时间】:2016-02-14 18:49:28
【问题描述】:
#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 进行简单的引用传递,但我的程序实际上不会调用我的算法。所以每次我输入销售额时,它都不会用我的算法打印结果。我对传递值不是很有经验,所以任何帮助都将不胜感激,所以我知道我在这里缺少什么。

非常感谢!

【问题讨论】:

  • 您应该查看The Definitive C++ Book Guide and List 并找到一本初学者书籍或教程,因为这样很容易找到这个问题,并有一些很好的解释来说明区别。
  • 这是一种非常复杂的方法,试图找出按值传递和按引用传递之间的区别。你应该简化你的例子。
  • 你的 getSales() 参数不是按引用传递,而是按值传递调用。

标签: c++ reference void


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:
    //pass variable by reference
    void getSales(int sales)
    {
    }
    

    不传递参数按引用,而是按值

    通过引用传递它使用类型的引用说明符:

    void getSales(int& sales)
                  // ^
    {
    }
    

    【讨论】:

      【解决方案3】:

      通过引用传递类似于通过指针传递(除了不能重新定位引用),这意味着您调用的函数不会获取传递值的副本,而是访问从调用者传入的值范围。 要通过引用传递,您必须在 getSales 函数中的类型中添加一个 & 符号。就目前而言,您正在通过值传递 int,而“int&”将通过引用传递。就像 'int*' 会通过指针传递。

      【讨论】:

        【解决方案4】:

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

        int getSales();
        

        我认为输出参数只能作为最后的手段。它们往往使代码难以阅读。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-02
          • 2017-03-27
          • 2011-09-16
          • 1970-01-01
          相关资源
          最近更新 更多