//引用的用途:可以利用引用用形参修饰实参,引用的语法比指针操作地址更加简单易懂。
//1.不要返回局部的引用 2.如果函数返回的是引用,则这个函数调用可以作为左值
#include<iostream>
using namespace std;
//引用的用途:可以利用引用用形参修饰实参,引用的语法比指针操作地址更加简单易懂。//1.不要返回局部的引用 2.如果函数返回的是引用,则这个函数调用可以作为左值int& test2()
{//为了让a不放在栈区,将其声明为静态变量static int s_a = 10;return s_a;//做完以上操作后 test2()就可以看成s_a了
}//引用传递交换数据,相当于创建了两个临时变量a1、b1来当作传入的a、b的别名.当然这里不用a1、b1,直接用也a、b一样。
void swap1(int& a1,int& b1)
{int temp = a1;a1 = b1;b1 = temp;
}
//地址传递交换数据
void swap2(int* a,int* b)
{int temp = *a;*a = *b;*b = temp;
}int main()
{cout << "直接返回后输出s_a=" << test2() << endl;test2() = 1000;//相当于变量m和test2()函数中的s_a是同一块内存的名字。相当于:m <=> s_a,操纵m相当于操纵s_acout << "函数作为左值重新赋值后s_a=" << test2() << endl;int& n = test2();cout << "返回给引用n后输出,n="<<n << endl;cout << endl;int a = 10;int b = 20;cout << "原始数据a=" << a << endl;cout << "原始数据b=" << b << endl << endl;swap1(a,b);cout << "引用传递后a=" << a << endl;cout << "引用传递后b=" << b << endl << endl;swap2(&a, &b);cout << "地址传递后a=" << a << endl;cout << "地址传递后b=" << b << endl << endl;system("pause");return 0;
}
需要注意的是,代码中的test2()函数经过执行后,再次调用就可以将test2()这个函数当成s_a这个变量了