C和C++区别——引用

CC++区别——引用

int &b = a,引用变量b,引用符号必须紧跟变量名,&符号如果前面有类型,就是引用,如果前面没有类型就是取地址。

那么,我们把上面的代码转到反汇编,定义和定义一个指针变量,还有引用的反汇编是一样的,通过引用变量赋值和通过指针变量解引用赋值的反汇编也是一样的,源代码汇编以后,在底层的反汇编根本不认识什么引用,引用在汇编上其实就是个指针,就是个地址,

1.定义引用变量是否开辟内存?答案是肯定的,你需要存你所引用变量的地址,int &b = a;把a赋给了引用变量b,那么引用变量b就要在栈上开辟4个字节大小地址来存储a的地址,是在系统上开辟的内存,指针变量是明确的向系统申请的四个字节,所以两个是一样的。


但是如果是单纯的用p的话,访问的是指针变量的内存的值,*p代表指针变量所指向内存的值,&p是指针变量所指向内存的地址,p就代表ebp-0Ch,

如果是引用变量b的话,不代表ebp-8,ebp-8存储的是a的地址,把a的地址放到eax寄存器,把20放到了a里面,

也就是说,当你定义一个引用变量的时候,我们要开辟4个字节大小,用来存储它所引用变量的地址,但是当你访问引用变量的时候,底层就是指针解引用的过程,

我们打印一下地址,可以看到,a,b地址相同,p不一样,


定义引用变量b的时候,开辟了ebp-8的内存,但是我们发现访问b的时候访问不到那个独立的4个字节的内存,你只要访问引用变量,它就会解引用,它永远访问的都是它所引用的内存,书上写的定义引用变量不开辟内存意思是,你永远不可能访问到定义引用变量时系统悄悄给它开辟的内存,


a, b, *p的地址时相同的,所以改变b的值,a 和*p的值也改变了,改变*p的值,a和b的值也改变了,



定义一个引用变量引用数组名,如下图:



那么有这样一道题如图,b1,b2,b3的区别是什么呢?

未完。。。




版权声明:本文为zm_2209068178原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。