0

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

我知道,通过引用传递,调用者使被调用函数能够直接访问调用者的数据并对其进行修改,但这无法通过将变量传递给函数(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

谢谢你。

4

2 回答 2

4

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

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

于 2012-07-05T19:08:51.940 回答
3

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

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

于 2012-07-05T19:13:43.870 回答