指针作为函数参数的详解-------让你彻底弄懂指针传参问题!!!

最经典的案例

       写一个交换函数,实现两个数的交换

#include<iostream>
using namespace std;
void swap1(int a,int b)
{
	int temp=a;
	a=b;
	b=temp;
	cout<<"函数内交换结果:"<<endl;
	cout<<"a 的值:"<<a<<endl; 
	cout<<"b 的值:"<<b<<endl; 
	cout<<endl;
}
int main()
{
	int a=10,b=20;
	cout<<a<<" "<<b<<endl;
	cout<<"a和b的初值:"<<endl;
	cout<<"a 的值:"<<a<<endl; 
	cout<<"b 的值:"<<b<<endl; 
	cout<<endl;
	
	swap1(a,b);
	
	cout<<"调用函数后的结果:"<<endl;
	cout<<"a 的值:"<<a<<endl; 
	cout<<"b 的值:"<<b<<endl; 
	cout<<endl;
	return 0;
}

运行结果:

结果分析:很明显经过上面那个函数并没有实现想要的结果。

原因:采取上述传参,只是相当于把实参赋给了形参,但是形参并不影响实参,就像C++里面的语句:a=b;

这只是把b的值赋给a,但是对b并没有啥影响。

指针传递

#include<iostream>
using namespace std;
int swap1(int *p1,int *p2)
{
	int temp=*p1;
	*p1=*p2;
	*p2=temp;
	cout<<"函数内交换结果:"<<endl;
	cout<<"a 的值:"<<*p1<<endl; 
	cout<<"b 的值:"<<*p2<<endl; 
	cout<<endl;
}
int main()
{
	int a=10,b=20;
	cout<<"a和b的初值:"<<endl;
	cout<<"a 的值:"<<a<<endl; 
	cout<<"b 的值:"<<b<<endl; 
	cout<<endl;
	
	swap1(&a,&b);
	
	cout<<"调用函数后的结果:"<<endl;
	cout<<"a 的值:"<<a<<endl; 
	cout<<"b 的值:"<<b<<endl; 
	cout<<endl;
	return 0;
}

运行结果:

结果分析:成功实现了交换

原因:对于写函数时候,函数的参数有指针(*p),调用函数时,传参传了一个地址( &a ),

可以这样理解  int *p=&a;    经过传参这个过程,就好比进行了一个指针的定义和赋值,实参的传递为函数为函数提供了一个地址,在函数内部可以对这个地址进行操作(可以改变地址的值或者进行赋值操作),这样一来,在函数里面进行交换,结果就能影响主函数的交换了(交换函数实现的本质)。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值