关于指针交换两个变量的值

废话不多说直接上代码:


#include<iostream>
using namespace std;
void exchange(int *p1, int *p2){
	int temp;
	temp = *p1;
	*m = *n;
	*n = temp;
}
int main(){
	int x,y;
	cin>>x>>y;
	exchange(&x,&y);
	cout<<x<<"  "<<y;
}

其中完成变量交换的代码(exchange函数)一目了然,然而笔者却踩过这样的坑 代码如下:


void exchange(int *p1, int *p2){
	int *temp;
	temp = p1;
	p1 = p2;
	p2 = temp;
}

但是我单纯的认为指针嘛, 就是地址我交换地址不就行了,然而残酷的是这样并不能得偿所愿。
原因是:主函数传参时,虽然明面上是值是相同的:但这仅仅是对实参的拷贝,比方说我们传进去的是 &x ,内部可能是&_x,二者不尽然相同,而当函数调用结束,&_x这个东西自然也会随之消失 所以 此方法根本就不会对主函数的调用有什么影响(就好比在这函数内部生成了几个参数 自己玩了一会儿 在函数调用结束又消失了,根本就是自娱自乐),更别说交换其值。。

:对实参的拷贝 对实参的拷贝 对实参的拷贝 (重要的事情说三遍) 不是变量本身的地址 ,如果真的传入发是变量的地址,这种写法大概 也许 可能 未尝不对 。。。。。

void exchange(int *p1, int *p2){
	int temp;
	temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

反观这个函数 同样也会对传入的实参就行拷贝 ,不过这个就明确了变量的地址,p1表示变量x的地址,p2表示变量y的地址,该函数执行时
1:temp = p1; temp作为中间量 首先保存p1的值(即x的值);
2:*p1 = *p2; 表示把p2所指的变量(y)的值 赋给p1所指的变量;
3:*p2 = temp; 表示把temp(即p1所指的变量)赋给 p2所指的变量;

同样在函数调用结束后 形参会被销毁 但在调用该函数的时候确确实实 把 p1,p2所指变量的值给交换了呀!!!故通过这种方式就完成了值的交换

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值