善用指针---用指针做函数参数

#include<iostream>
using namespace std;

void swap_1(int *p1,int *p2)//形参变量p1得到实参p的值&a,形参变量p2得到实参q的值&b,接着进行交换
{
	int t;
	t=*p1;
	*p1=*p2;
	*p2=t;
}

void swap_2(int *p1,int *p2)
{
	int *temp;
	*temp=*p1;//此语句有问题 应该将*p1的值赋给一个临时的整型变量,即可进行交换
	          //temp所指向的单元是不可预见的,在这样的情况下,对*temp赋值是危险的。 
	*p1=*p2;
	*p2=*temp;
}

void swap_3(int p1,int p2)//因为只能从实参向形参传递数据,形参值的改变无法回传给实参,即“单向值传递”
{
	int t;
	t=p1;
	p1=p2;
	p2=t;
}

int main()
{
	int a=3,b=4;
	int *p,*q;
	p=&a;
	q=&b;

	cout<<"原始:"<<"a="<<a<<",b="<<b<<endl;

	swap_1(p,q);
	cout<<"swap_1:"<<"a="<<a<<",b="<<b<<endl;

	//swap_2(p,q);
	//cout<<"swap_2:"<<"a="<<a<<",b="<<b<<endl;

	swap_3(a,b);
	cout<<"swap_3:"<<"a="<<a<<",b="<<b<<endl;//可见,a与b的值没有交换回来

	system("pause");
	return 0;
}


swap_1:用指针做函数参数,指针传的是地址,肯定可以通过修改形参指针变量所指向的值,来打到修改 a与b的值。

swap_3:如果仅仅只是值传递,只能从实参向形参传数据,形参的值的改变无法传回实参。

除此之外,调用函数时不会改变实参指针变量的值,但可以改变实参指针变量所指向变量的值。

下面的swap同样无法交换:

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


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值