c++|引用作函数参数

引用作为函数参数(按引用传递),使得函数中的变量名成为调用程序中的变量的别名

即我们可以操作到调用程序中的变量,而单纯的值传递只能影响到函数中变量,而无法影响到调用程序中的变量。

看下面一个简单的值交换例子:

#include <iostream>
void swapr(int &a, int &b);
void swapp(int *p, int *q);
void swapv(int a, int b); 

int main() {
	using namespace std;
	
	/* 原来两个钱包所包含的钱数 */
	cout << "原来:"; 
	int wallet1 = 300;
	int wallet2 = 400;
	cout << "wallet1 = $" << wallet1;
	cout << " wallet2 = $" << wallet2 << endl;
	
	/* 按引用传递 */ 
	cout << "引用:";
	swapr(wallet1, wallet2);
	cout << "wallet1 = $" << wallet1;
	cout << " wallet2 = $" << wallet2 << endl;
	
	/* 按指针传递 */
	cout << "指针:"; 
	swapp(&wallet1, &wallet2);
	cout << "wallet1 = $" << wallet1;
	cout << " wallet2 = $" << wallet2 << endl;
	
	/* 值传递 */
	cout << "传值:";
	swapv(wallet1, wallet2);
	cout << "wallet1 = $" << wallet1;
	cout << " wallet2 = $" << wallet2 << endl;
	
	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;
}

程序运行结果:

原来:wallet1 = $300 wallet2 = $400
引用:wallet1 = $400 wallet2 = $300
指针:wallet1 = $300 wallet2 = $400

传值:wallet1 = $300 wallet2 = $400

由此可见,引用和指针传递改变了wallet1和wallet2的内容,而值传递值交换失败。事实上,值传递改变的是函数中a与b的值。

从传参开始,swapv函数就创建了两个变量a与b,wallet1和wallet2的值赋值给了a与b,所有该函数并没有对wallet1和wallet2作出改变。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值