C++:引用

引用

  • 作用:起别名

引用的本质在c++内部实现是一个指针常量

注意事项:
引用必须引一块合法内存空间
不能返回局部变量的引用

void test1001() {
	int a = 10;
	int& b = a;
	b = 100;
	cout << a << endl;//输出100
	cout << b << endl;//输出100
}
void test1002() {
	int a = 10;
	//引用必须初始化
	int &b = a;
	//引用一旦初始化就不可以引向其他变量
	int c = 20;
	b = c;
	cout << a << endl;//输出20
	cout << b << endl;//输出20
	cout << c << endl;//输出20
}
  • 对数组建立引用
void test1003() {
	//直接建立引用
	int arr[10];
	int(&pArr)[10] = arr;
	for (int i = 0; i < 10; i++)
	{
		arr[i] = 100 + i;
	}
	for (int i = 0; i < 10; i++)
	{
		cout << pArr[i] << endl;
	}
	cout << "=============" << endl;
	//先定义数组类型,再通过类型定义引用
	typedef int(ARRAY_TYPE)[10];
	ARRAY_TYPE& pArr2 = arr;
	for (int i = 0; i < 10; i++)
	{
		cout << pArr2[i] << endl;
	}
}

参数传递

//值传递:外部无效
void mySwap01(int a, int b) {
	int temp = a;
	a = b;
	b = temp;
}

//地址传递:外部有效
void mySwap02(int* a, int* b) {
	int temp = *a;
	*a = *b;
	*b = temp;
}

//引用传递:外部有效
void mySwap03(int &a, int &b) {
	int temp = a;
	a = b;
	b = temp;
}

void test1101() {
	int a = 10;
	int b = 20;
	//mySwap01(a, b);
	//mySwap02(&a, &b);
	mySwap03(a, b);
	cout << a << " " << b << endl;
}

指针的引用

利用引用可以简化指针
可以直接用同级指针的引用给同级指针分配空间

void allocateSpace2(Person* &p) {
	p = (Person*)malloc(sizeof(Person));
	p->age = 20;
}

void test1202() {
	Person* p = NULL;
	allocateSpace2(p);
	cout << "p.age=" << p->age << endl;
}

常量的引用

void test1301() {
	const int& ref = 10;
	int* p = (int*)&ref;
	*p = 100;
	cout << ref;//输出100,常量引用可以通过指针修改
}

常量引用的使用场景:修饰函数中的形参,防止误操作

void showValue(const int& a) {
	a = 1000;//a不能直接做左值,编译不通过
	cout <<"inner_a=" << a << endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值