int f3(int i, int j) {
int& k = i;
++j;
return ++k;
}
int main()
{
int i = 2, j = 4, k;
k = f3(i, j);
cout << "i: " << i << " j: " << j << " k: " << k << endl;
return 0;
}
为什么我得到i = 2
和k = 3
。我的意思是因为我设置了int& k = i
,i和k本质上是相同的变量,因为它们共享相同的内存空间。任何人都可以用简单的英语解释为什么会这样吗?或者我不理解什么?
在这里你将i
设置为2
:
int i=2,
在这里你通过i
:
k=f3(i,j);
但是,你传递的是i
的副本:
int f3(int i, int j) // you need a "&" in here too if you want to pass the reference
所以在这一行:
int& k = i;
您将k
设置为i
副本的引用。因此,当你改变它时,来自i
的实际main
不会改变。
相反,试试这个:
int f3(int &i, int j) { // now you're pssing a reference to i, not a copy thereof
而你的i
的输出值将是3
。有关通过引用调用的一个很好的示例,请参阅here。
int f3(int i, int j)
参数i
作为值传递。所以在i
中声明的变量main
和函数中的参数i
是不同的变量。如果i
在i
中声明,你需要传递main
作为参考,使其成为参考。
int f3(int &i, int j)
您可以按值传递参数。
变量k
仅引用i
函数内的局部变量f3
。
你是对的,我和k本质上是同一个变量。但是,在这行int f3(int i, int j)
中,你已经通过值传递了变量i
,而不是通过引用。这意味着无论你在函数中对i
做出什么修改,它们都不会保存在int main()
中。
int f3(int i, int j) {
int& k = i; // k = 2 and it's a reference to the local variable i
++j;
return ++k; // k = 3, local variable i = 3
}
int main() {
int i = 2, j = 4, k;
k = f3(i, j); // k = 3, i and j are unchanged because they were passed by value
cout << "i: " << i << " j: " << j << " k: " << k << endl;
return 0;
}
你在这里做了什么int& k = i;
,你创建了一个参考k
到局部变量i
,这只是你的i
变量int main()
的副本。基本上,k
对i
的int main()
没有任何伤害。