C++指针在函数中的用法

函数中的数值传递分为值传递地址传递

  • 值传递是单纯的复制,修改的只是形参。
void swap(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;
	cout << "swap a = " << a << endl;
	cout << "swap b = " << b << endl;
}
  • 地址传递是由形参复制实参的地址,通过解引用的方式访问这个地址,修改后得到的是实参地址上的数据,也就是通过地址传递是可以修改实参的。
void swap_ptr(int *p1, int *p2)
{
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
	cout << " swap *p1 = " << *p1 << endl;
	cout << "swap *p2 = " << *p2 << endl;
}

在main函数中进行交换:

	int A = 10;
	int B = 20;
	cout << "交换前A = " << A << endl;
	cout << "交换前B = " << B << endl;
	swap(A, B);
	cout << "main函数中A = " << A << endl;
	cout << "main函数中B = " << B << endl;
	swap_ptr(&A, &B);
	cout << "main函数中A = " << A << endl;
	cout << "main函数中B = " << B << endl;

在这里插入图片描述
显然值传递并没有更改A、B实参,而地址传递更改了A、B实参。

地址传递的优点:
值传递会将形参拷贝,如果数据量非常大,比如一个结构体内包含很多信息,当结构体作为形参进行值传递时,系统首先需要对其进行拷贝,这样就会占用大量的内存空间。而地址传递则没有这种问题,地址传递会将地址形参拷贝,解引用后对地址上的数值进行修改,不会有占用大量无意义内存的问题。

使用常量指针防止地址传递可能带来的误操作:
当使用地址传递时,如果不小心修改了地址上的值,是会对程序中的实参造成影响的。那么如何避免这种误操作?显然,我们可以使用常量指针来限制形参不可改变地址对应的值,那么就可以避免这种误操作了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值