C++——引用

C++出现了新的概念:引用。引用是某个对象的别名。

语法格式如下:

        类型&引用名=变量名;

#include 

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 
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;
}

引用和被引用者是同一块地址

已用用途

  1. 简化编程,用指针的场景可以用引用替换(尽量减少指针的使用)
  2. 系统开销更小

使用引用需要注意以下几个问题

&的位置是灵活的,以下几种定义完全相同

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;
}

你可能感兴趣的:(c++,java,算法)