07-引用

14 篇文章 0 订阅
11 篇文章 0 订阅

1.在C语言中,使用指针(Pointer)可以间接获取、修改某个变量的值
2.在C++中,使用引用(Reference)可以起到跟指针类似的功能
3. 注意点
3.1.引用相当于是变量的别名(基本数据类型、枚举、结构体、类、指针、数组等,都可以有引用)
3.2.对引用做计算,就是对引用所指向的变量做计算
3.3.在定义的时候就必须初始化,一旦指向了某个变量,就不可以再改变,“从一而终”
3.4.可以利用引用初始化另一个引用,相当于某个变量的多个别名
3.5.不存在【引用的引用、指向引用的指针、引用数组】
4.引用存在的价值之一:比指针更安全、函数返回值可以被赋值

#include <iostream>
using namespace std;

void test() {
	int age = 10;

	int height = 20;

	// 定义了一个age的引用,ref相当于是age的别名
	int &ref = age;
	int &ref1 = ref;
	int &ref2 = ref1;

	ref += 10;
	ref1 += 10;
	ref2 += 10;

	cout << age << endl;
}

//void swap(int *v1, int *v2) {
//	int tmp = *v1;
//	*v1 = *v2;
//	*v2 = tmp;
//}

void swap(int &v1, int &v2) {
	int tmp = v1;
	v1 = v2;
	v2 = tmp;
}

void test2() {
	int a = 10;
	int b = 20;
	// swap(&a, &b);
	swap(a, b);
	cout << "a = " << a << ", b = " << b << endl;

	int c = 2;
	int d = 3;
	swap(c, d);
	cout << "c = " << c << ", d = " << d << endl;
}

一个引用占用一个同类型指针的大小
//struct Student {
//	int &age;8byte
//	int *age;8byte
//};

// x86: 32bit
// x64: 64bit
int main() {
	// cout << sizeof(Student) << endl;

	int age = 10;

	// *p就是age的别名
	int *p = &age;
	*p = 30;

	// ref就是age的别名
	int &ref = age;
	ref = 30;

	int a = 3;
	int b = a + 1;

	getchar();
	return 0;
}

5.引用的本质就是指针,只是编译器削弱了它的功能,所以引用就是弱化了的指针

	int a = 10;
00901FE2  mov         dword ptr [ebp-0Ch],0Ah  
	int *p = &a;
00901FE9  lea         eax,[ebp-0Ch]  
00901FEC  mov         dword ptr [ebp-18h],eax  
	*p = 20;
00901FEF  mov         eax,dword ptr [ebp-18h]  
00901FF2  mov         dword ptr [eax],14h 


	int a = 10;
00D41FE2  mov         dword ptr [ebp-0Ch],0Ah  
	int &ref = a;
00D41FE9  lea         eax,[ebp-0Ch]  
00D41FEC  mov         dword ptr [ebp-18h],eax  
	ref = 20;
00D41FEF  mov         eax,dword ptr [ebp-18h]  
00D41FF2  mov         dword ptr [eax],14h   
  1. 一个引用占用一个指针的大小
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值