C ++引用和引用参数

时间:2012-07-05 19:06:00

标签: c++

请查看下面的代码片段 - 我已经声明了3个函数(即1传递int而其他函数传递给int)。执行程序后,我发现调用函数(tripleByReference)后的“count”变量值没有改变,以反映其三元组(count仍然等于5)。但是,调用函数(tripleByReferenceVoid)会修改变量,但这是因为更改直接发生在变量(count)上。

我理解通过引用传递,调用者为被调用函数提供了直接访问调用者数据并修改它的能力,但是通过将变量传递给函数(tripleByReference)无法实现 - 请帮助我理解这一点

#include <iostream>
using namespace std;

/* function Prototypes */
int tripleByValue(int);
int tripleByReference(int &);
void tripleByReferenceVoid(int &);

int main(void)
{
    int count = 5;

    //call by value
    cout << "Value of count before passing by value is: " << count << endl;
    cout << "Passing " << count << " by value, output is: "
         << tripleByValue(count) << endl;
    cout << "Value of count after passing by value is: " << count << endl;

    //call by reference - using int tripleByReference
    cout << "\n\nValue of count before passing by reference is: " << count << endl;
    cout << "Passing " << count << " by reference, output is: " 
         << tripleByReference(count) << endl;
    cout << "Value of count after passing by reference is: " << count << endl;

     //call by reference - using void tripleByReference
     tripleByReferenceVoid(count);
     cout << "\n\nValue of count after passing by reference is: " << count << endl;
    cout << endl;
    system("PAUSE");
    return 0;
}//end main

int tripleByValue (int count) {
    int result = count * count * count;
    return result; 
}//end tirpleByValue function

int tripleByReference(int &count) {
     int result = count * count * count;
     return result; //perform calcs     
}//end tripleByReference function

void tripleByReferenceVoid(int &count) {
     count *= count * count;
}//end tripleByReference function

谢谢。

2 个答案:

答案 0 :(得分:4)

tripleByReference不会更改count的值,因为您从未分配给它。您将返回该值。

tripleByReferenceVoid不同。您正在分配它(count *= ...),这就是反映这些变化的原因。

答案 1 :(得分:3)

在您的函数tripleByReference中,您甚至没有尝试修改count的值,而在您的函数tripleByReferenceVoid中,您正在明确修改count。因此明显和预期的效果:后者功能修改count,前者不修改。即这些功能完全符合你明确而有意识地要求他们做的事情。

像这样的问题很难回答,因为几乎不可能理解是什么让你问它。你似乎对这两个函数的行为不同这一事实感到困惑。但是,当你自己明确地将它们描述为在特定方面有所不同时,为什么它会让你感到困惑呢?