c++ - 函数定义中与 '&'运算符相关的疑问!

标签 c++ algorithm

<分区>

Possible Duplicate:
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=&x
存储地址但是当我们这样做时会发生什么

int &点=x。

最佳答案

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

关于c++ - 函数定义中与 '&'运算符相关的疑问!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6107590/

相关文章:

c++ - enable_shared_from_this 可以在没有继承的情况下使用吗?

c++ - 分数 boolean 运算符

algorithm - 使用贪心算法进行优化

python - 承包 networkx 中的节点列表

python - 如何在 Python(不使用 MedPy)或 C 中将 *.mha 文件转换为 *.nii 文件?

c++ - 当函数已知时的傅立叶变换

c++ - 使用自定义用户输入处理在屏幕上播放透明视频

c - 在单调递增然后递减的序列cera中找到一个数字

algorithm - 计算 cargo 需要多少辆卡车(后续)

c++ - 求根时的包围算法。 "quadratic"函数中的单根