C++中引用的使用
//每日心得:独上高楼,望尽天涯路
//日期:12.11
//学习内容:引用 的使用
重点
1、作用: 给变量起别名
2、语法:数据类型 & 别名(小名) = 原名
3、原名和别名 都是修改 同一块内存 (指向同一块内存,指针相同)
注意事项
1、引用必须初始化
2、引用在初始化后,不可以改变
引用做函数参数
1、作用:使形参修饰实参,简化指针修改实参(可以改实参)
2、对别名(的内容)修改 同时也会改 原名(的内容)
***引用作为返回值
1、不要返回局部变量的引用!!!
2、 函数调用作为左值 (等号左边)
#include <iostream>
using namespace std;
void test1()
{
//引用的说明
int a = 10;
int& m_a = a;
cout << "引用赋值前:" << a << endl
<< "a的地址:" << &a << endl;
m_a = 20;
cout << "引用赋值后:" << a << endl
<< "m_a的地址:" << &m_a << endl;
// a 的地址 和 m_a 的地址相同
}
void test2()
{
int b = 10;
//1、引用必须初始化
//int& m_b; 错误!
int& m_b = b;
//2、引用在初始化后,不可以发生改变
int c = 30;
m_b = c; //赋值操作,而不是更改引用 不能改m_b为c的别名
cout << "b =" << b << endl
<< "m_b =" << m_b << endl
<< "c =" << c << endl;
cout << "&b =" << &b << endl
<< "&m_b =" << &m_b << endl
<< "&c =" << &c << endl;
}
int& test3()
{
//不要返回局部变量的引用!!!
int a1 = 10; //局部变量存放在四区中的 栈区 (系统管理 删除)
return a1;
}
int& test4()
{
static int b1 = 20; // 生命周期极长 (放入全局区) 静态变量 (全局区是在整个程序运行完后释放)
return b1;
}
int main()
{
test1();
cout << endl;
test2();
cout << endl;
int &m_a = test3();
cout << "释放前:" //第一次结果正确,编译器做了保留
<< "m_a = " << m_a << endl;
cout << "释放后:" //第二次结果错误,a 的内存已经被释放
<< "m_a = " << m_a << endl;
int& m_b = test4();
cout << "释放前:" //结果正确,编译器做了保留
<< "m_b = " << m_b << endl;
cout << "释放前:" //结果正确,编译器做了保留
<< "m_b = " << m_b << endl;
cout << endl;
//作为左值
test4() = 100;
cout << "修改后:" //利用 别名 改变了 原名 的数据
<< "m_b = " << m_b << endl;
return 0;
}