#include<bits/stdc++.h> using namespace std; void swap(int &a,int &b){ int t=b; b=a; a=t; } int & test01(){ int a=10; return a; } int & test02(){ static int a=10;//静态变量,存放在全局区,全局区上的数据在程序结束后系统释放 return a; } void showValue(const int &a){ cout<<"a= "<<a<<endl; } void func3(int& ref){ ref = 100; // ref是引用,转换为*ref = 100 } int main() { //c++中引用的基本语法 int a=10; int &b=a; //此时b和a同事指向了同一块地址 cout<<a<<endl; cout<<b<<endl; b=20; cout<<a<<endl; cout<<b<<endl; //使用引用的注意事项 //1、引用必须初始化 //2、引用在初始化后,不能改变 int c=10; int &d=c; //int &b;是错误的,必须先初始化 int e=30; //&b=c;是错误的,引用使用后就不可以改变 //引用作函数参数,相当于地址传递 int m=10; int n=20; swap(m,n); cout<<"m"<<m<<endl; cout<<"n"<<n<<endl; //引用作函数返回值 //1、不要返回局部 变量的引用 int & ref=test01(); cout<<"ref= "<<ref<<endl;//第一次结果正确,因为编译器做了保留 cout<<"ref= "<<ref<<endl;//第二次结果错误,因为a的内存已经释放 //2、函数的调用可以作为左值 int & ref2=test02(); cout<<"ref2= "<<ref2<<endl; cout<<"ref2= "<<ref2<<endl; test02()=1000;//如果函数的返回值是引用,函数调用可以作为左值 cout<<"ref2= "<<ref2<<endl; cout<<"ref2= "<<ref2<<endl; //引用的本质 //引用的本质在c++中内部实现是一个指针常量 //发现是引用,转换为 int* const ref = &a; int a0 = 10; //自动转换为 int* const ref = &a; 指针常量是指针指向不可改,也说明为什么引用不可更改 int& ref3 = a0; ref3 = 20; //内部发现ref是引用,自动帮我们转换为: *ref = 20; cout << "a0:" << a0 << endl; cout << "ref3:" << ref3 << endl; func3(a0); //常量引用 //作用:常量引用主要用来修饰形参,防止误操作 //在函数形参列表中,可以加ocnst修饰形参,防止形参改变实参 const int &ref4 =10; //加上const修饰之后,编译器将代码修改int temp=10;const int & ref=temp; //ref=20;错误,加入const之后变成只读,不可以修改 int aa=100; showValue(a); return 0; }