c++中引用和指针的区别

1、指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分配内存空间。

2、引用在定义的时候必须进行初始化,并且不能够改变。指针在定义的时候不一定要初始化,并且指向的空间可变。引用的初始值不能为NULL。

3、有多级指针,但是没有多级引用,只能有一级引用。

4、指针和引用的自增运算结果不一样。指针自增运算是指向下一个空间,引用自增运算是引用的变量值加1。

5、sizeof 引用得到的是所指向的变量(对象)的大小,而sizeof指针得到的是指针本身的大小。

6、引用访问一个变量是直接访问,而指针访问一个变量是间接访问。

7、使用指针前最好做类型检查,防止野指针的出现;

8、作为参数时也不同,传指针的实质是传值,传递的值是指针的地址;传引用的实质是传地址,传递的是变量的地址;

9、引用底层是通过指针实现的。

9:          int x = 1;
00401048    mov         dword ptr [ebp-4],1
10:         int &b = x;
0040104F    lea         eax,[ebp-4]
00401052    mov         dword ptr [ebp-8],eax

 汇编解释:

        x的地址为ebp-4,

        b的地址为ebp-8,

        因为栈内的变量内存是从高往低进行分配的。所以b的地址比x的低。

lea eax,[ebp-4]              # 将x的地址ebp-4放入eax寄存器
mov dword ptr [ebp-8],eax    # 将eax的值放入b的地址ebp-8中

上面两条汇编的作用即:

        将x的地址存入变量b中,这不和将某个变量的地址存入指针变量是一样的吗?所以从汇编层次来看,的确引用是通过指针来实现的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦实学习室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值