问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++中的引用(&)到底都有什么用处?

发布网友 发布时间:2022-04-22 03:27

我来回答

2个回答

热心网友 时间:2023-10-11 11:57

引用(reference)是c++对c语言的重要扩充。引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*,例如: Point pt1(10,10)。

Point &pt2=pt1;,定义了pt2为pt1的引用。通过这样的定义,pt1和pt2表示同一对象。

需要特别强调的是引用并不产生对象的副本,仅仅是对象的同义词,引用必须在定义时马上被初始化,因为它必须是某个东西的同义词。

循环结构:

循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do while循环和for循环。

四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto循环,因为强制改变程序的顺序经常会给程序的运行带来不可预料的错误。

特别要注意在循环体内应包含趋于结束的语句(即循环变量值的改变),否则就可能成了一个死循环,这是初学者的一个常见错误。

热心网友 时间:2023-10-11 11:58

引用(reference)是c++对c语言的重要扩充。
  一、引用的概念
  引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。
  例如: Point pt1(10,10);
  Point &pt2=pt1; 定义了pt2为pt1的引用。通过这样的定义,pt1和pt2表示同一对象。
  需要特别强调的是引用并不产生对象的副本,仅仅是对象的同义词。因此,当下面的语句执行后:
  pt1.offset(2,2);
  pt1和pt2都具有(12,12)的值。
  引用必须在定义时马上被初始化,因为它必须是某个东西的同义词。你不能先定义一个引用后才
  初始化它。例如下面语句是非法的:
  Point &pt3;
  pt3=pt1;
  那么既然引用只是某个东西的同义词,它有什么用途呢?
  下面讨论引用的两个主要用途:作为函数参数以及从函数中返回左值。
  二、引用参数
  1、传递可变参数
  传统的c中,函数在调用时参数是通过值来传递的,这就是说函数的参数不具备返回值的能力。
  所以在传统的c中,如果需要函数的参数具有返回值的能力,往往是通过指针来实现的。比如,实现
  两整数变量值交换的c程序如下:
  void swapint(int *a,int *b)
  {
  int temp;
  temp=*a;
  a=*b;
  *b=temp;
  }
  使用引用机制后,以上程序的c++版本为:
  void swapint(int &a,int &b)
  {
  int temp;
  temp=a;
  a=b;
  b=temp;
  }
  调用该函数的c++方法为:swapint(x,y); c++自动把x,y的地址作为参数传递给swapint函数。
  2、给函数传递大型对象
  当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高,因为引用并不产生对象的
  副本,也就是参数传递时,对象无须复制。下面的例子定义了一个有限整数集合的类:
  const maxCard=100;
  Class Set
  {
  int elems[maxCard]; // 集和中的元素,maxCard 表示集合中元素个数的最大值。
  int card; // 集合中元素的个数。
  public:
  Set () {card=0;} //构造函数
  friend Set operator * (Set ,Set ) ; //重载运算符号*,用于计算集合的交集 用对象作为传值参数
  // friend Set operator * (Set & ,Set & ) 重载运算符号*,用于计算集合的交集 用对象的引用作为传值参数
  ...
  }
  先考虑集合交集的实现
  Set operator *( Set Set1,Set Set2)
  {
  Set res;
  for(int i=0;i<Set1.card;++i)
  for(int j=0;j>Set2.card;++j)
  if(Set1.elems==Set2.elems[j])
  {
  res.elems[res.card++]=Set1.elems;
  break;
  }
  return res;
  }
  由于重载运算符不能对指针单独操作,我们必须把运算数声明为 Set 类型而不是 Set * 。
  每次使用*做交集运算时,整个集合都被复制,这样效率很低。我们可以用引用来避免这种情况。
  Set operator *( Set &Set1,Set &Set2)
  { Set res;
  for(int i=0;i<Set1.card;++i)
  for(int j=0;j>Set2.card;++j)
  if(Set1.elems==Set2.elems[j])
  {
  res.elems[res.card++]=Set1.elems;
  break;
  }
  return res;
  }
  三、引用返回值
  如果一个函数返回了引用,那么该函数的调用也可以被赋值。这里有一函数,它拥有两个引用参数并返回一个双精度数的引用:
  double &max(double &d1,double &d2)
  {
  return d1>d2?d1:d2;
  }
  由于max()函数返回一个对双精度数的引用,那么我们就可以用max() 来对其中较大的双精度数加1:
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...啊?我从嘴里吐出去是直的算过肺了吗?我不会从鼻子里出去_百度... 恶心呕吐是什么? 高考数学大题应注意哪些问题呢? 高考数学可不可以用高等数学啊 高考数学 基础知识点 常见考查方式 高考数学考什么内容 一般纳税人如何交所得税 以前的QQ忘记密码了那时候不要了就不找回密码了,现在想找回来,但是又没... 常州机场坐飞机流程 常州机场大巴时刻表 ...我早上九点起飞的飞机, 然后我这的机场快线大巴到机场时70分钟,_百 ... 请问c语言中引用怎样理解? 引用型变量 c/c++ C语言中为什么有变量?变量有什么用? c语言中变量是干什么用的 怎样知道QQ好友是否被人拉黑或删除? 怎么分辨对方把我qq拉黑还是删除好友了 如何用苹果手机传资料 问什么用了韩束紫竹平衡系列 刚刚可是用有点刺痛 ... 韩束紫竹洗面奶好少额,在超市买了一套四件套,刚... 韩束紫竹控油 用过之后 脸上为什么特干 特紧 起干... 护肤品韩束紫竹套装好用吗?多少钱一套 韩束紫竹是不是温和的 混合型皮肤用韩束墨菊的还是紫竹的 最近买了一套韩束紫竹的护肤品,可是用了几天,好... 十五岁女生皮肤油鼻子有痘痘用韩束紫竹细肤平衡水... 有哪些学生党可以入手的平价好用的补水护肤品? 我20岁,毛孔粗大容易长痘痘,又是草莓鼻,好多黑... 出油毛孔粗大有黑头用韩束紫竹套装好吗 韩束紫竹系列能经常用么 韩束 东方紫竹 净颜细肤平衡系列怎样? 说明c语言程序中变量的作用域及存储位置。 c++中引用的好处有什么呢 - C / C++ - c语言问题,什么叫引用啊? c语言中什么叫引用? 在c语言中什么是变量的作用域 c语言变量引用 如何在c语言中定义及引用全局变量? 工行信用卡手机怎么取现 工行信用卡能用手机提现吗? 工行信用卡可以提现吗 工商银行信用卡可以取现金吗 工商银行信用卡溢缴款柜台取现限额是多少? 工商银行信用卡可以取现金吗 手续费高吗 比特币是谁发明的 ekt和鸿星尔克有关系吗 比特币创始人真实身份揭晓 比特币创始人是谁 比特币与以太坊他们创始人是谁? EKT是什么品牌 传说中比特币的创始人是谁 比特币的创始人是谁?