将引用作为函数参数笔记

#include <iostream>
void swapr(int & a,int & b); //a,b are aliases for ints
void swapp(int * p,int * q); //p,q are addresses of ints
void swapv(int a,int b); // a,b are new variables
int main()
{
	using namespace std;
	int wallet1=300;
	int wallet2=350;
	swapr(wallet1,wallet2);
	swapp(&wallet1,&wallet2);
	swapv(wallet1,wallet2);
	return 0;
}

void swapr(int & a,int & b)
{
	int temp;
	temp = a;
	a = b;
	b = temp;
}

void swapp(int * p, int * q)
{
	int temp;
	temp = *p;
	*p = *q;
	*q = temp;
}

void swapv(int a, int b)
{
	int temp;
	temp = a;
	a = b;
	b = temp;
}

/*三个函数结果分别为
350,300
300,350
300,350

*/

按引用传递(swapr(wallet1,wallet2))和按值传递(swapv(wallet1,wallet2))看起来相同。只能通过原型或函数定义才能知道swapr()是按引用传递的。然而,地址运算符(&)使得按地址传递(swapp(&wallet1,&wallet2))一目了然(类型声明int * p表明,p是一个int指针,因此与p对应的参数应地址,如(&wallet1)。
在swapr中,变量a和b是wallet1和wallet2的别名,所以交换a和b的值相当于交换wallet1和wallet2的值;
但在swapv中,变量a和b是复制了wallet1和wallet2的值的新变量,因此交换a和b的值并不会影响wallet1和wallet2的值。
最后,函数swapr()(传递引用)和swapp()(传递指针)的不同,第一个区别是声明函数参数的方式不同
void swapr(int & a,int & b)
void swapp(int * p, int * q)
另一个区别是指针版本需要在函数使用p和q的整个过程中使用解除引用运算符 *;

摘自C++ Primer Plus

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值