可能重复:
Pointer vs. Reference
大家好,
我正在尝试探索,并且我遇到了引用运算符的问题。考虑通过引用交换代码进行的正常调用,如下所示
#include<iostream>
using namespace std;
void test(int *a,int *b){
int temp;
temp = *a;
*a= *b;
*b= temp;
cout<<"\n Func a="<<*a << " b=" << *b;
}
int main()
{
int a=5,b =3;
cout<<"\n Main a="<<a << " b=" << b;
test(&a,&b);
cout<<"\n Main again a="<<a << " b=" << b;
return 0;
}
另一方面,下面的代码也进行相同类型的交换,并产生完全相同的结果。
#include<iostream>
using namespace std;
void test(int &a,int &b){
int temp;
temp = a;
a= b;
b= temp;
cout<<"\n Func a="<<a << " b=" << b;
}
int main()
{
int a=5,b =3;
cout<<"\n Main a="<<a << " b=" << b;
test(a,b);
cout<<"\n Main again a="<<a << " b=" << b;
return 0;
}
有人可以解释第二个例子中函数调用的不同之处(第一部分我很舒服,其中地址被作为参考,但在第二个例子中会发生什么)?
在同一行中,希望在赋值语句中也是如此,即
int a=5;
int &b=a;
提前致谢。
编辑:
感谢您的回复。但我怀疑的是记忆中究竟发生了什么
int * pointer =&amp; x
存储地址,但是当我们这样做时会发生什么
int&amp; point = x。
答案 0 :(得分:4)
答案 1 :(得分:0)
&
表示您通过引用传递参数。您传递的变量与您在函数中运行的变量完全相同。实际上使用指针或引用之间没有显着差异,因为当您传递指针然后取消引用它时,您再次获得完全相同的变量。总结一下:在这两种情况下都可以修改传递的变量。相反,当你传递变量值时。
答案 2 :(得分:0)
在这两种情况下,您都是通过引用传递变量。在第一个函数中,您可以在概念上考虑传递的地址。在第二个例子中,我在概念上认为变量本身是传递的,但是通过引用而不是值传递。
我不是百分百肯定,但我怀疑大多数编译器会编译成相同的目标代码。