变量是一个内存的别名,程序通过变量名使用内存空间,当然一个内存空间可以起多个别名么?
答案:可以,这就是c++中引用的由来,引用就是给变量起别名
引用是c++的概念!!!况且声明引用的符号&十分像是取地址操作
#include<iostream> #include<string> using namespace std; void main() { string name = "徐晓冬"; string &name2 = name;//name2就是对name的引用 name2 = "陈培昌"; cout << "我是" << name << endl; cout << "哟~原来是老弟你" << endl; system("pause"); }
当然引用在定义的时候必须要初始化
用途:交换数值
#include<iostream> #include<string> using namespace std; void swapnum(int a,int b) { //int a = 2, int c = 0; //int b = 3; c = a; a = b; b = c; } void canswap(int &a,int &b) { int c = a; a = b; b = c; } void needleswap(int *a, int*b) { int c = *a; *a = *b; *b = c; } void main() { int a = 20; int b = 30; //needleswap(&a, &b); canswap(a,b); cout << "a:" << a << "b:" << b << endl; system("pause"); }
输出结果:
- 引用的本质:其实和指针有异曲同工之妙
#include"iostream" #include<string> using namespace std; struct mycoach { string name; string &hiscoachname; int &age; }; void main() { string coach = "徐晓冬"; printf("struct实例地址是%d ", sizeof(coach)); printf("struct实例地址是%d ", sizeof(mycoach)); system("pause"); }
- 引用作为函数的返回值
#include"iostream" #include<string> using namespace std; int& getnum() { int a = 10; return a; } void main() { int &b = getnum();//返回内存空间,命名为b,函数运行完空间被释放掉,一些版本的编译器可能导致乱码,栈变量不能作为初始化返回值,可能带来问题!而静态变量和全局变量无此问题 int c = getnum();//返回变量本身,副本 printf("b的值是%d ",b); printf("c的值是%d ",c); system("pause"); }
输出结果:基于vs2013
- 左值----函数在操作的左边---即给函数赋值
#include"iostream" #include<string> using namespace std; int& getnum() { static int a = 10; a++; return a; } void main() { getnum() = 60;//这样一来,a的值由10变成了60 int &c = getnum(); printf("a的值是%d ", c); getnum() = 100; int &b=getnum(); printf("a的值是%d ",b); system("pause"); }
输出结果: