彻底搞懂C++指针和引用( 底层回答方式 面试分拉满)

什么是指针?

   (及格回答方式)    指针的定义 type*  type 为类型  任何类型都可以定义成指针 指针本身也是一种数据类型 它用于保存各种数据类型在内存中的地址

什么是引用?

     (及格回答方式)  引用定义 type& type为类型  引用定义就必须被初始化 引用表示一个变量别名 对它的任何操作 就相当于对变量本身操作  所以说引用也是指针 是一种特殊的指针

源程序如下 :

#include<iostream>
int main(){
    int a =666;
    int* b = &a;
    int& c =a;
    return 0;

}

汇编代码:

	int a = 666;
 //dword ptr 双字(四个字节)  将666放入[a]局部变量内存单元  此时栈中局部变量a=666
01041832  mov         dword ptr [a],29Ah    
	int* b = &a;
//lea指令 将a指向的内存单元放入eax寄存器 此时的eax寄存器存储了 变量a的地址  eax = a的地址
01041839  lea         eax,[a]  
//mov指令 将eax的地址移动 栈中局部变量b (因为上面已经a的内存单元放入eax寄存器了)  那么也就是说b的地址存储了a的地址值  看到这里应该彻底明白什么是指针了吧
0104183C  mov         dword ptr [b],eax  
	int& c = a;

----------------------------------------引用操作--------------------------------------------
//将局部变量a指向内存单元 放入eax寄存器
0104183F  lea         eax,[a]  
//如同上 将a的地址放入栈中的局部变量C  现在明白了 引用就是一个特殊的指针  他是有地址的  只是不能操作而已  编译器帮我维护的指针
01041842  mov         dword ptr [c],eax  
	return 0;

总结:

    指针和引用类型的储存方式是一样的    都是内存空间存放地址值  所以 在c++中  指针和引用没有分别  引用通过编译器寻址 也就是编译器帮我们维护  而指针 需要手动寻址 操作失误将产生严重的后果

   C++提倡优先使用使用引用

面试官:

   有了指针为什么还需要引用?

      答:为了支持运算符重载看起来好看一些

  有了引用为什么还需要指针?

     答:为了兼容C语言

说说他们的相同点?

    答:理论他们都是指针 都可以直接修改引用的值或指向的值

    不同点?
        1:引用创建必须初始化 而指针可以不用初始化
        2: 引用永远指向他初始的那个值 而非const顶层指针指向地址可以随意修改 
    各自优点?
        指针比较灵活 只要是非const顶层指针指向地址都可以随便改 但是坑多  比如空指针野指针 未初始化就用 值被改变还用
        而引用就不存在上面的问题 他的优点就是他缺点  不够灵活

 

   添加老丁微信  建立程序员圈子  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值