引用变量

引用是已定义变量的别名  ——  c++ primer plus

语法: int& car_a = car;

该语法表示car_a 是car的别名, 其实car_a完全可以理解为car本身,因为他们地址与值都是相同的。

1. 引用传参与按值传参的区别

(1) 按引用传参传的是实参本身, 按值传参要复制一份内存, 所以引用传参效率更高

(2) 按引用传参可直接操作原始数据, 按值传参在复制的内存上操作数据, 不能修改原始数据

(3) 引用值属于右值, 是可供修改的内存块, 可通过赋值进行修改, 按值传递则是临时内存块, 执行到下一条

      语句不再存在

2. 引用传参与指针传参的区别

(1) 首先, int& car_a = car 是 int* const car_a = &car的伪装

(2) 引用具有全局不变性, 终生效忠于一个变量, 指针可以易主,指向其他变量

(3) 引用在使用前必须初始化, 指针没有这个要求

(4) 引用无需分配内存空间, 访问形参就是访问变量本身,是直接访问;指针分配了内存空间存储变量的地址,

      需要通过地址找到  指向的变量, 是间接访问(既然引用是常量指针,那么实际上引用还是为指针分配了内存的)

(5) 使用指针的值需要解引用 * , 引用可直接使用变量

(6) 不存在空引用,引用必须指向一块合法的内存

//按引用传参
//交换的就是实参本身
void swapr(int& a, int& b)
{
int temp;
temp = a;
a = b;
b = temp;
}
//按指针传参
//传入的是地址,但交换的是存在地址的值
void swapp(int* p, int* q)
{
int temp;
// *是解引用运算符,即p的地址引用,取地址的值
temp = *p;
*p = *q;
*q = temp;
}
//按值传参
//形参复制了实参的新变量,交换的是复制值,并没有改变原值
void swapv(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}

int main ()
{
int car = 10;
int bike = 20;

//引用传参
swapr(car,bike);
cout<<car<<" "<<bike<<endl;
//指针传参
swapp(&car,&bike);
cout<<car<<" "<<bike<<endl;
//按值传参
swapv(car,bike);
cout<<car<<" "<<bike<<endl;
}


结果:

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值