#include <iostream> using namespace std; //一.引用作函数参数 //1.分析:通过引用参数产生的效果和那地址传递是一样的,引用的语法更加清晰 void swap(int &m,int &n) { int tmp=m; m=n; n=tmp; } //二.引用作函数返回值 //1.注意事项:不要返回局部变量引用 //2.用法:函数调用作为左值 int& test1() { int a=10;//局部变量,存放在四区中的栈区 return a;//返回的是变量a的引用,相当于返回变量a } int& test2() { static int a=10; return a; } int main(int argc, char** argv) { //一.引用作函数参数 //1.分析:通过引用参数产生的效果和那地址传递是一样的,引用的语法更加清晰 int a=10; int b=20; cout<<"a="<<a<<endl; cout<<"b="<<b<<endl; swap(a,b); cout<<"a="<<a<<endl; cout<<"b="<<b<<endl; //二.引用作函数返回值 //1.注意事项:不要返回局部变量引用 int &ret1=test1(); cout<<"ret1="<<ret1<<endl;//值为10 , 结果正确,因为编译器对变量进行了保留 cout<<"ret1="<<ret1<<endl;//值为0,结果错误,因为返回的是局部变量,a的内存已被释放 cout<<"ret1="<<ret1<<endl;//值为0,结果错误,因为返回的是局部变量,a的内存已被释放 //如何解决呢? int &ret2=test2(); cout<<"ret2="<<ret2<<endl;//值为10 cout<<"ret2="<<ret2<<endl;//值为10 cout<<"ret2="<<ret2<<endl;//值为10 //2.用法:函数调用作为左值 test2()=30;//test2()就是变量a cout<<"ret2="<<ret2<<endl;//值为30 cout<<"ret2="<<ret2<<endl;//值为30 cout<<"ret2="<<ret2<<endl;//值为30 }