对 值传递,地址传递,引用传递的理解

一、值传递

值传递是啥,直接上代码

int change(int a,int b)
{
	int c;
	c=a;
	a=b;
	b=c;
 } 

定义了一个函数,传入2个值,交换这两个值。

看看能不能交换

int change(int a,int b)
{
	int c;
	c=a;
	a=b;
	b=c;
	printf("函数内a=%d,b=%d\n",a,b);
 } 

 int main()
 {
 	int a=10;
 	int b=20;
 	change(a,b);
 	printf("函数外%d %d\n",a,b);
 } 

结果:不行

函数内这两个值的确发生了变换,为啥函数结束后并没有改变原来的值呢?

因为在传参时,是把a和b的值赋值了一份,作为参数传进函数,对变量本身没有影响。

二、地址传递

地址传递,就是把变量的地址传进去。

  int change2(int *a,int *b)
 {
 	int c;
	c=*a;
	*a=*b;
	*b=c;
 }
 int main()
 {
 	int a=10;
 	int b=20; 
	printf("%d %d\n",a,b);
 	change2(&a,&b);///参数为指针,直接传递地址 
 	printf("%d %d\n",a,b);
 } 	

参数列表中的int *a,int *b,定义了指针a,b,其实就是地址

函数内赋值运算时为啥用*a,*b呢,我之前的文章说过,这个*在赋值运算时相当于解引用,相当于把地址中的内容拿出来。

https://blog.youkuaiyun.com/qq_37040743/article/details/127563999?spm=1001.2014.3001.5502

在主函数中,因为函数的参数是2个地址,传参的时候也要传地址,所以用&去取地址,作为参数传入。

结果:变量实现了交换

 3、引用传递

 int change3(int &a,int &b)
 {
 	int c;
	c=a;
	a=b;
	b=c;
 }

 int main()
 {
 	int a=10;
 	int b=20; 
	printf("%d %d\n",a,b);
 	change3(a,b);///把变量自身直接传入 
 	printf("%d %d\n",a,b);
 }

 引用传递想干啥呢

先看一下定义:

在C++中,函数参数的传递方式有引用传递。所谓引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

在值传递中,把变量复制了一份传进去,引用传递就想能不能把变量本身传进去,其实也相当于把地址传了进去,在主函数传参时,直接用变量本身作为函数参数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

箫毒赵药师

嘿嘿嘿

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值