指针作为函数形参

本文探讨了C++中函数参数传递的两种方式:值传递和指针传递。值传递时,函数内部的形参与实参是两个独立的对象,无法直接改变实参的值。而指针传递则允许通过形参改变实参指向的内存内容,实现实参值的更新。但指针传递不能改变指针本身的指向。示例代码展示了这两种传递方式的效果差异。
  • C++primer:每次调用一个函数,都会重新建立一个形参(类似于临时变量),传入的实参作为初始化值拷贝给形参,一旦实参的值拷贝给形参后,形参和实参其实是两个不同的对象了
  • 如果我们将一个int变量传入,改变值是不生效的
void member_change(int a)
{
	a++;
}
int main()
{
	int a = 1;
	//int* p = &a;
	//cout << &p << endl;
	//ptr_change(p);
	//cout << &p << endl;
	cout << a << endl;
	member_change(a);
	cout << a << endl;
	return 0;
}
/*
1
1
*/
  • 如果将一个指针传入,当我们试图改变指针指向的内容时,是可以生效的。
void ptr_change(int* p)
{
	int a = 2;
	*p = a;
}
int main()
{
	int a = 1;
	int* p = &a;
	cout << *p << endl;
	ptr_change(p);
	cout << *p << endl;
	cout << a << endl;
	return 0;
}
/*
1
2
2
*/
  • 当我们试图改变指针指向的时候,实际上是不行的。
void ptr_change(int* p)
{
	int a = 2;
	int* b = &a;
	p = b;
}
int main()
{
	int a = 1;
	int* p = &a;
	cout << &p << endl;
	ptr_change(p);
	cout << &p << endl;
	return 0;
}
/*
0000000EBC71FAF8
0000000EBC71FAF8
*/
  • 局部变量作为形参传入时,会复制给形参作为临时变量,本身的值不能被改变,改变的只是在函数内部的临时变量,也就不能改变指针的指向。
    • 但是指针的值作为地址的时候,它的指向的空间是真实的,也就是说,我们即使在函数内部操作的是该形参,当我们利用这个值去修改的确存在的内存时,是有效的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值