C++函数形参是引用但是实参用的是变量,为什么函数能调用成功?

#include<iostream>

void test(int&);

int main()
{
	using namespace std;

	int a = 5;
	test(a); //这里传递的不是引用,是变量

	return 0;
}

void test(int& t)
{
	using namespace std;
	cout << "& has been passed here. t is " << t << endl;
}

函数test()的形参是引用&,但是在调用时实参用的是变量a,为何这种调用合法?

多加了几行测试了一下

void test(int&);
int main()
{
	using namespace std;

	int a = 5;
	test(a); //这里传递的不是引用,是变量
	cout << "after the func a is " << a << endl;

	return 0;
}

void test(int& t)
{
	using namespace std;
	
	cout << "& has been passed here. t is " << t << endl;
	t = 6;
}

引用t实质上成了a的引用,目前的想法是在参数传递的过程中进行了赋值

&t = a;

将t作为a的引用,再执行函数操作,不知道事实是否如此。

刚刚又看了一遍清华的C++引用课程,瞬间明白,有几个点:

(1)引用必须在定义时直接初始化,不能先定义之后再初始化,引用是不可更改的。

(2)函数在调用时候才会给形参分配内存空间,也就是调用之前函数内的局部变量不存在。

综合这两个点就知道,在函数调用时才会给形参分配存储空间,那么当函数调用时,这个引用t才被创建,然后立即用实参对其进行初始化,也就是上面写的&t = a;这个操作。也就是在形实结合的时候,这个引用才被定义。

想法正确!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值