请查看下面的代码片段 - 我已经声明了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
谢谢。
答案 0 :(得分:4)
tripleByReference
不会更改count
的值,因为您从未分配给它。您将返回该值。
tripleByReferenceVoid
不同。您正在分配它(count *= ...
),这就是反映这些变化的原因。
答案 1 :(得分:3)
在您的函数tripleByReference
中,您甚至没有尝试修改count
的值,而在您的函数tripleByReferenceVoid
中,您正在明确修改count
。因此明显和预期的效果:后者功能修改count
,前者不修改。即这些功能完全符合你明确而有意识地要求他们做的事情。
像这样的问题很难回答,因为几乎不可能理解是什么让你问它。你似乎对这两个函数的行为不同这一事实感到困惑。但是,当你自己明确地将它们描述为在特定方面有所不同时,为什么它会让你感到困惑呢?