C++中的引用-引用做函数参数和引用做函数返回值

  • 引用做函数参数

 

  • 总结:通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单
点击查看代码
#include<iostream>
#include<string> 

using namespace std;

//交换函数
//1、值传递 (形参不会修饰实参)
void mySwap01(int a, int b)
{
	int tmp = a;
	a = b;
	b = tmp;

	cout << "mySwap01 a = " << a << endl;
	cout << "mySwap01 b = " << b << endl;
}

//2、地址传递 (形参会修饰实参)
void mySwap02(int* p, int* q)
{
	int tmp = *p;
	*p = *q;
	*q = tmp;

	cout << "mySwap02 p = " << *p << endl;
	cout << "mySwap02 q = " << *q << endl;
}


//3、引用传递 (形参会修饰实参)
void mySwap03(int &m, int &n)
{
	int tmp = m;
	m = n;
	n = tmp;

	cout << "mySwap03 m = " << m << endl;
	cout << "mySwap03 n = " << n << endl;
}

int main()
{
	int a = 10;
	int b = 20;

	mySwap01(a, b);  //值传递,形参不会修饰实参

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	int p = 30;
	int q = 40;

	mySwap02(&p, &q);  //地址传递,形参会修饰实参

	cout << "p = " << p << endl;
	cout << "q = " << q << endl;

	int m = 50;
	int n = 60;

	mySwap03(m, n);  //引用传递,形参会修饰实参

	cout << "m = " << m << endl;
	cout << "n = " << n << endl;

	system("pause");

	return 0;
}

 

  • 引用做函数返回值

 

点击查看代码
#include<iostream>
#include<string> 

using namespace std;

//引用做函数的返回值
//1、不要返回局部变量的引用
int& test01()
{
	int a = 10; //局部变量放在四区的 栈区中
	return a;
}

//2、函数的调用可以作为左值
//如果函数的返回值是引用,这个函数调用可以作为左值

int& test02()
{
	static int b = 20; // 静态变量,存放在全局区,全局区上的数据在 程序结束后 系统释放
	return b;
}

int main(){

	int &ref = test01();
	cout << "ref = " << ref << endl; //10  第一次结果正确,是因为编译器做了保留
	cout << "ref = " << ref << endl; //1665461568  第二次结果错误,因为a的内存已经释放

	int &ref2 = test02();
	cout << "ref2 = " << ref2 << endl;//20
	cout << "ref2 = " << ref2 << endl;//20

	//函数的调用可以作为左值
	test02() = 1000; //test02返回b的引用,即 b = 1000;
	//ref2 就是b的别名
	cout << "ref2 = " << ref2 << endl;//1000
	cout << "ref2 = " << ref2 << endl;//1000

	system("pause");

	return 0;
}

 

posted @ 2021-07-26 11:01  毋纵年华  阅读(417)  评论(0)    收藏  举报