函数传参之变量,一重指针,二重指针

先上结论:
函数内部修改外部变量的值,需要一重指针传递该变量的地址;
函数内部修改外部一重指针变量的值,需要二重指针传递一重指针自身的地址;
如果传递变量的值或者一重指针的值,函数内部则会新建临时变量接收值,而无法改变外部变量的值。
参考博客

1、函数传参之变量与一重指针
要理解函数传参的机制及其原理,就不得不先了解地址与值的概念。
地址是一个变量在内存中的位置,值是该地址对应的值。
地址是变量的key,是其在内存中的索引,值是变量的value。
变量值传递的例子:

void main(){
	int a = 4,b = 6;
	Exchange(a, b);
	print("a = %d,b = %d\n", a, b);
}
void Exchange(int x, int y){
	int temp = x;
	x=y;
	y=temp;
	print("x = %d,y = %d\n", x, y);
}

输出结果是
a = 4,b = 6
x = 6,y = 4;
a,b的值并没有交换。这是因为Exchange函数中新建了两个临时变量用于接收a,b的值。
如果想改变函数外部的值,即main中a,b的值,必须要传递a,b的地址,比如通过一重指针的地址传递 Exchange(int* x, int* y)或者引用传递 Exchange(int& x, int& y)。通过传递变量的地址给子函数,地址key对应的value值发生改变,才会改变main函数中变量的值。

结论:只传递变量的值给子函数,则子函数会新建临时变量(新的地址)用于接收变量的值,不管新地址对应的值如何改变都不会改变原变量的值。

函数传参具体可以参考这篇博客https://blog.youkuaiyun.com/qq_28657577/article/details/80424786

2、函数传参之一重指针与二重指针
当变量为一重指针,想要改变外部一重指针的值则必须通过二重指针。
一重指针的值即为该指针指向的地址,改变一重指针的值,即将指针指向另一个变量或为其分配新的内存空间。

void main(){
	int* p;
	Func1(p);   //传递指针p的值
	Func2(&p); //传递指针p自身地址
}
Func1(int* a)
{
	a=new int();
}
Func2(int** a)
{
	(*a)=new int();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值