语法格式如下:
? ? ? ? 类型&引用名=变量名;
#include <iostream>
using namespace std;
int main(int argc, const char *argv[])
{
int i = 100;
int &ir = i;//给变量i起了个别名 叫ir
cout << "i = " << i << endl;
cout << "ir = " << ir << endl;
cout << "i的地址:" << &i << endl;
cout << "ir的地址:" << &ir << endl;//输出内容,地址相同
return 0;
}
引用应用
#include <iostream>
using namespace std;
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void swap1(int &a, int &b) {
int temp;
temp = a;
a = b;
b = temp;
}
int main(int argc, const char *argv[])
{
int x = 10;
int y = 20;
swap(&x,&y);
swap1(x,y);
cout << "x=" << x << " "<< "y=" << y << endl;
return 0;
}
引用和被引用者是同一块地址
使用引用需要注意以下几个问题
&的位置是灵活的,以下几种定义完全相同
int& ir = i;
int & ir = i;
int &ir = i;
在变量声明时出现&才是引用运算符(包括函数参数声明和函数返回类型的声明)
int &ri = i;
int &f(int &i1,int &);
引用必须定义时初始化
float f;
float &r1 = q;
float &r2;
r2 = f;//错误
const 引用(常引用)。在定义引用时一般为左值(变量)
左值:是指变量对应的那块内存区域,是可以放在复制符号左边的值;
右值:是指变量对应的内存区域中储存的数据值,是可以放在复制符号右边的值
常量、表达式都是右值,例如
int i =1;
i = i + 10;
i + 10 = i;//错误
i = 10;
10 = i;//错误
可以使用const进行限制,使他成为不允许被修改的常量引用(也叫万能引用)
int &i = 100;//errno
const int &i = 100;//ok的
char &c = a;//错误,将c转换char 类型,转换结果保存到临时变量中,实际引用临时变量,而临时变量是右值
引用的本质
引用的本质就是指针常量。
//int *const x = &m;int *const y = &n;
void swap(int &x,int &y) {
int tmp = 0;
tmp = x; //tmp = *x;
x = y; //*x = *y;
y = tmp;// *y = tmp;
}
int main(void) {
int m = 10,n = 20;
swap(m,n);
return 0;
}