C++ 函数之形参

C++ 函数之形参、传递方式及其本质

什么是形参

形参,顾名思义,就是形式上的参数,这个参数并没有实际的具体含义,进一步讲,就是没有具体的值。如定义一个函数:

void add(int a)
{
	a = a + 2;
}

其中,参数a并没有具体的含义,只知道它是一个int类型的参数,这就是形参。

传递方式

当调用函数时,有三种向函数传递参数的方式:

传递方式说明
值传递把实参赋值给形参,修改形参不影响实参。
引用传递形参相当于实参的别名,修改形参相当于修改实参
指针传递直接对指针操作,修改形参相当于修改实参

默认情况下,函数采用值传递的方式进行传递。

//定义三个函数,分别用值传递、引用传递、指针传递
void add(int a)
{
	a = a + 2;
}
void subtract(int& a)
{
	a = a - 2;
}
void multiply (int* a)	//形参a为指向int类型的指针
{
	*a = *a * 2;	//形参a前的*为解引用符,2前的*为乘号
}

分别调用三个函数:

main()
{
	int num = 7;
	add(num);
	std::cout << num << std::endl;	//num值不发生变化,7 == num
	subtract(num);
	std::cout << num << std::endl;	//num值不发生变化,5 == num
	multiply (&num)
	std::cout << num << std::endl;	//num值不发生变化,10 == num
}

深度剖析:
add(int a)采用值传递的方式,在函数执行前,把实参num复制给形参a,由形参类型的复制构造函数完成。如果实参与形参类型不一致,实参必须进行类型转换,与形参类型保持一致。函数运行结束时,调用形参类型的析构函数释放形参参数。当函数运行结束时,形参并不会赋值到对应的实参中,所以实参的值并不会改变。
subtract(int& a)采用引用传递方式,实参num相当于形参a的别名,即在函数执行期间,num替代了a,形参a并没有调用复制构造函数和析构函数。所以,理论上讲,引用传递比值传递效率更快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

撒欢打滚的人儿

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值