C++之按值传递、指针传递和引用传递

#include<iostream>
void swapr(int & a, int & b);     //a, b are aliases for ints
void swapp(int * p, int * q);     // p, q are address of ints
void swapv(int a, int b);         // a, b are new variables
int main()
{
	using namespace std;
	int wallet1 = 300;
	int wallet2 = 350;
	cout << "wallet1 = $" << wallet1;
	cout << " wallet2 = $" << wallet2 << endl;   // 原始数据为wallet1 = 300, wallet2 = 350

	cout << "Using references to swap contents:\n";
	swapr(wallet1, wallet2);     // pass variables
	cout << "wallet1 = $" << wallet1;
	cout << " wallet2 = $" << wallet2 << endl;   // 利用引用作为参数进行交换,成功之后, wallet1 = 350, wallet2 = 300

	cout << "Using pointers to swap contents again:\n";
	swapp(&wallet1, &wallet2);   // pass addresses of variables 一目了然地按地址传递,p是一个int指针,所以p对应的参数是地址
	cout << "wallet1 = $" << wallet1;
	cout << " wallet2 = $" << wallet2 << endl;   // 利用指针作为参数进行交换,成功之后, wallet1 = 300, wallet2 = 350

	cout << "Tring to use passing by value:\n";
	swapv(wallet1, wallet2);     // pass values of variables
	cout << "wallet1 = $" << wallet1;
	cout << " wallet2 = $" << wallet2 << endl;  // 按值传递,失败,所以wallet1的值依旧是300, wallet2的值是350
	system("pause");                 // 按值传递时,函数不会访问当前调用的实参,函数处理的值是它本地的拷贝,这些拷贝
	return 0;                        // 被存储在运行栈中,因此改变这些值不会影响实参的值,一旦函数结束,这些局部值也就消失了
}                                    // 如果没有按值传递的机制,那么每个么有被声明const的参数就可能会随每次函数的调用而被改变。
                                     // 按值传递的为好最小,需要用户做得工作也最少,按值传递时参数传递合理的缺省机制。
void swapr(int & a, int & b)    // use reference
{
	int temp;
	temp = a;     // use a, b for values of variables
	a = b;
	b = temp;
}

void swapp(int * p, int * q)    // use pointers
{
	int temp;
	temp = * p;    // use *p, *q for values of variables
	*p = *q;
	*q = temp;
}

void swapv(int a, int b)  // try using balues 变量a,b复制了wallet1和wallet2的值得新变量,因此交换a,b的值不会影响wallet1和wallet2 的值
{
	int temp;
	temp = a;     // use a, b for values of variables
	a = b;
	b = temp;
}

// 可以看到使用引用传递和按值传递的的函数是一样的,只有在看到函数原型才知道是引用传递还是按值传递

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值