C++--引用

本文介绍了C++中的引用类型,它作为变量的别名,不占额外内存。引用在函数参数中使用可以实现对实参的直接修改,避免了值传递的副本开销。通过示例展示了引用如何用于交换变量值,以及const引用用于保护实参不变。此外,还讨论了引用在提高效率和防止意外修改实参方面的作用。
摘要由CSDN通过智能技术生成

9.C++引入了“引用类型”,占据一个独立的内存块,即一个变量是另一个变量的别名。

例子:

#include <iostream>
using namespace std;
int main(){
  double a = 3.1415927;
  double &b = a; //&不是c语言的取地址,这里指的b是引用变量,b是a的别名,b就是a
  b = 14; //a的内存块值为14
  cout << "a contains:" << a << end1; //输出14
}

注意:引用经常用作函数的形参,表示形参和实参实际上是同一个对象,也就是说在函数中对形参的修改也就是对实参的修改。

例1(不能够起到引用的作用):

#include<iostream>
using namespace std;
void swap(int x,int y) {
  cout << "swap函数内交换前:" << x << " " << y << endl;
  int t = x; X = y; y = t;
  cout<< "swap函数内交换后:" << x << " " << y << endl;
}
int main(){
  int a = 3, b = 4;
  swap(a,b); //调用swap()函数,这里的a就是x,b就是y,x和y的值是独立的
  cout << a << "," << b << endl;  //结果是3,4
  return 0;
}

例2:

/* 
  x,y得到2个int型变量的指针,x, y本身没有修改修改的是x, y指向的那2个int型变量的内容
*/
void swap(int *x, int *y){ //这里x和y表示的是整型变量的地址
  cout << "swap函数内交换前:" << *x << " " << *y << endl;
  int t = *x; *x= *y; *y= t; //这里是对a和b的指针变量进行了修改
  cout << "swap函数内交换后:" << *x << " " << *y << endl;
}
int main(){
  int a = 3,b = 4;
  swap(&a,&b); //&a赋值给x,&b赋值给y,这里的x, y分别是int*指针,指向a, b,*x和*y就是a和b
  cout << a << "," << b << endl; //输出4,3
  return 0;
}

注意:修改两个变量一定要把变量的地址传递给函数,然后这个函数通过取地址符访问到变量。


 例3:

//x, y是实参的引用
void swap(int &x, int &y){
  cout << "swap函数内交换前:" << & <<" "<< y << endl;
  int t = X; x = y; y = t;
  cout << "swap函数内交换后:"<< x <<" "<< y << endl;
int main(){
  int a = 3, b = 4;
  swap(a,b);//x, y分别是a, b的引用,即x就是a, y就是b
  cout << a << "," << b << endl; //4,3
  return 0;
}

这里是不需要将一个内存拷贝到另一个内存。

引用的作用:当实参栈占据内存大时,用引用代替普通的传值(需要复制)可提高效率,如果不希望因此无意中修改实参,可以用const修改符(const表示不可修改的常量)。

例子:

#include <iostream>
using namespace std;
void change(double &x,const double &y, double z){
  x = 100;
  y =200;//这里是错误的,y不可修改,因为是const double &
  z= 300;
int main(){
  double a, b, c;//内在类型变量未提供初始化式,默认初始化为0
  chanae(a h c);
  cout << a << "," << b << "," << c << endl;  //程序会报错,因为修改了常量的值
  return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gaoxiaochan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值