引用

需要有pointer(指针),即上一个视频的基础

引用其实是指针的扩展,只是指向指针的语法糖,让他更容易阅读。引用本质上是引用现有变量,不同于指针,你可以在其中创建新的指针变量让后将其设置为空指针或其他。引用本身实际上并不占据新变量,他们实际上没有存储空间。

	int a = 5;
	int* b = &a;

	//&符号是类型的一部分
	//使用ref就跟使用a的别名一样
	int& ref = a;
	//这里编译器编译后会直接设置a,而
	//不会再创建一个变量
	ref = 2;

	LOG(a);

使用地址增加 #

void Increment(int* value) {
	//首先引用指针,然后增加指针处的值
	(*value)++;
}

int main()
{

	int a = 5;
	Increment(&a);
	LOG(a);

	std::cin.get();
}

使用引用实现一样的效果,但是代码更加美观

void Increment(int& value) {
	value++;
}

int main()
{

	int a = 5;
	Increment(a);
	LOG(a);

	std::cin.get();
}

引用的禁忌 #

不能指向其他地方


void Increment(int& value) { 
	value++;
}

int main()
{

	int a = 5;
	int b = 8;
	//必须初始化,否则编译错误
	int& ref = a;
	
	//不会出现编译错误,但是其实没有任何效果
	ref = b;

	Increment(ref);
	LOG(b);//打印8,未改变b的值

	std::cin.get();
}

指针,则可以任意变换赋值

	int a = 5;
	int b = 8;

	int* ref = &a;
	*ref = 2;
	ref = &b;
	*ref = 1;

	LOG(a);//2
	LOG(b);//1