因为在看书时多处看到引用但理解不深,思考之后,决定写一篇博客。
一、基本语法
引用 作用:给变量起别名
int a=10;
//操纵这块内存
起一个b,也去操纵这块内存。
数据类型与原来一样 数据类型 &别名 = 原名
int &b=a;
b=20;
cout << a << endl; 20
修改同一块内存
二、注意事项:
引用必须初始化,且一旦初始化后不可以再改变。
三、引用做函数参数,可以简化指针修改实参
int myswap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
//会改变实参
原因:a是a的别名,b是b的别名(别名可以相同)
四、引用做函数返回值:
1、不要返回局部变量的引用
2、函数调用可以作为左值
函数调用完返回a的变量 a=1000,ref2本身是a的别名。访问到相同的内存
int& fun1()
{
int a=10;
return a;
}
int& fun2()
{
static int a=10;//静态变量,全局
return a;
}
int main(){
int &ref=fun1();
cout << "ref= " << ref << endl;
cout << "ref= " << ref << endl;
int &ref2=fun2();
cout << "ref2= " << ref2 << endl;
cout << "ref2= " << ref2 << endl;
fun2()=1000;
cout << "ref2= " << ref2 << endl;
cout << "ref2= " << ref2 << endl;
return 0;
}
//fun1
//第一次结果正确,是因为编译器做了保留
//第二次结果错误,因为a的内存已经释放
//ref2的输出为
//ref2=10
//ref2=10
//ref2=1000
//ref2=1000
五、引用的本质是一个指针常量
即指针指向不可以修改,指针内部的值可以修改
int a=10;
int& ref=a; 编译器自动转换为 int* const ref =&a;
ref=20; 即*ref=20
六、常量引用
主要用来修饰形参,防止误操作
int a=10;
const int &ref=10;
正确,加上const之后 编译器将代码修改 int temp =10;const int &ref =temp;(原名未知,但引用引了一块合法的内存空间)此时只读
void fun1(const int &ref);
参考:黑马程序员C++
C++ primer