//引用做函数返回值

//1.不要返回局部变量引用,因为局部变量在调用对应函数之后会被释放掉
//2.函数调用可以作为左值 比如:int& test()=1000;

//3.引用的本质 发现是引用,转换为 int* const ref = &a;


#include<iostream>
using namespace std;
//引用做函数返回值
//1.不要返回局部变量引用,因为局部变量在调用对应函数之后会被释放掉
//2.函数调用可以作为左值 比如:int& test()=1000;

//返回局部变量引用
int& test01() {
int a = 10;//局部变量 (局部变量存储在栈区)
return a;
}
//返回静态变量引用,静态变量存储在全局区
int& test02() {
static int b = 20;
return b;
}

//引用的本质 发现是引用,转换为 int* const ref = &a;
void func(int& ref) {
ref = 100;
}
int main() {
//int& ref = test01();
//cout << "输出ref=" << ref << endl;//输出ref = 10
//cout << "输出ref=" << ref << endl;//输出ref = 2078378376

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

//引用的本质:指针常量
//自动转换成int* const ref3 = *a; 指针常量是指针指向不可改,这也说明了为啥引用一旦定义就不可以修改了
int a = 10;
int& ref3 = a;
ref3 = 20;//编译器发现ref3是引用,自动帮我们转换成:*ref3=20;这是一种推荐的代码风格
cout << "a=" << a << endl;
cout << "ref3 = " << ref3 << endl;

func(a);

cout << "func a=" << a << endl;
cout << "func ref3 = " << ref3 << endl;


system("pause");
return 0;
}

结果:

引用做函数返回值 C++初学笔记_指针常量