怀疑相关'&'函数定义中的运算符!

时间:2011-05-24 08:20:38

标签: c++ algorithm

  

可能重复:
  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。

3 个答案:

答案 0 :(得分:4)

  • 两个版本执行相同的工作,很可能编译器会发出相同的目标代码。
  • 使用参考参数的版本更容易阅读。
  • 您可以将NULL指针传递给使用指针的版本,这会导致内存冲突。使用参考参数也无法犯同样的错误。

答案 1 :(得分:0)

&表示您通过引用传递参数。您传递的变量与您在函数中运行的变量完全相同。实际上使用指针或引用之间没有显着差异,因为当您传递指针然后取消引用它时,您再次获得完全相同的变量。总结一下:在这两种情况下都可以修改传递的变量。相反,当你传递变量值时。

答案 2 :(得分:0)

在这两种情况下,您都是通过引用传递变量。在第一个函数中,您可以在概念上考虑传递的地址。在第二个例子中,我在概念上认为变量本身是传递的,但是通过引用而不是值传递。

我不是百分百肯定,但我怀疑大多数编译器会编译成相同的目标代码。