【C++笔记】函数中参数传递

本文深入探讨了函数参数的传递机制,解释了为何直接传递值不能改变原有变量,并提供了使用引用和指针两种有效方法来实现变量值的交换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数中参数是如何传递的呢?

在《C++Primer》一书中提到:

“Each time we call a function, its parameters are created and initialized by the arguments passed in the call。”(每次调用函数时,都会重新创建该函数所有的形参,此时所传递的实参将会初始化对应的形参。)

可能会有点模糊,说白了就是在调用函数时,如果函数中有参数,则函数中的参数会先被创建出来,然后把传入函数的实参的值一一赋值给你所创建的参数,而这个你所创建的参数就是上面所说的形参。

理解函数中的参数的传递也是挺重要的,这也有助于你在实现函数的这类方法的时候灵活得到应用。

关于函数的传递,其它的不多说,这里我们就来处理一个问题就行了,这问题如下:

通过函数来改变现有实参的值。

感觉好像很简单,其实这当中如果你不了解其中参数传递的本质,可能会处理不好这个问题。

举个简单的例子,看以下代码:

#include<iostream>
using namespace std;
void Swap(int a, int b){
	int temp;
	temp = a;
	a = b;
	b = temp;
}
int main()
{
	int a = 1, b = 2;
	cout << "交换前:" << endl;
	cout << "a = " << a << "\t" << "b = " << b << endl;
	Swap(a, b);
	cout << "交换后:" << endl;
	cout << "a = " << a << "\t" << "b = " << b << endl;
<span style="white-space:pre">	</span>return 0;
}

这里尝试着两个int型的变量值进行交换,结果如下:


如果我们想对两个int型变量的值进行交换,Swap函数并不可以实现真正的交换。为什么?函数体里不是实现了交换了吗?是的,的确是进行交换了,但是交换的是实参的拷贝。

上面一开始就有提到,函数被调用时,函数形参被创建并赋值为实参的值。但是这并不会影响实参现有的值,即实参值保持不变。

所以这里如果要进行真正值得交换,有很多方法,比如形参作为引用再把实参传入:

void Swapanother(int &a, int &b){
	int temp;
	temp = a;
	a = b;
	b = temp;
}

调用如下:

Swapanother(a, b);

或是形参作为指针,把实参地址传入:

void Swap(int *a, int *b){
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}
调用如下:

Swap(&a, &b);
这两种方法都可以改变实参的值,结果如下:



总结:

1.调用函数时函数中的参数会先另外创建出来,然后再其赋予对传入实参的值。

2.修改传入实参的值可以通过形参引用或者指针传址的方式修改。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值