引用与指针的区别

    说起引用和指针,相信大多数人都或多或少的有些许疑问吧,小编来给大家小解一下,讲的不好请使劲拍砖,小编承受能力极强,不信你试试。

    先谈一下为什么有了高效的指针还要引入引用呢?

    有过学C语言的同学都知道指针的重要性,它高效灵活,但是实物都有两面性,高效灵活则意味着容易出错。对于一个指针,它所指向的对象是灵活的,他可以指向任何一个与它类型相匹配的对象,这一刻它指向对象1,下一刻就有可能指向另一个对象2,这就容易引发安全隐患,如将一个自己定义的指针指向一个系统对象,一旦你对该指针进行操作,就有可能引起系统崩溃,还有就是野指针和未初始化的指针都有安全隐患,为了解决在一定程度上弥补指针的缺点,就引入了指针,注意引用这一概念在C语言中使没有的,在C++、C#中有,其它语言有没有小编就不清楚了。

    引用:在实际编程中引用主要用做函数的形式参数,它其实就是一个对象的别名,它在定义的时候必须要初始化,这一点与实际生活中给小伙伴起外号是一样的,你是看人(相当于对象)来起外号(相当于引用),而不是先想外号再找人,并且一旦初始化之后,该引用就只能指向所关联的对象了,不能再指向其它对象了,就像现实中的你只能有一个合法老婆一样,对引用的所有操作都相当于对所关联对象本身的操作。其中const 引用需要你关注。

    对于非const引用,用于初始化引用的必须是一个与该引用同类型的对象,不能是一个常量  

     int a;
     int &s=a;  //ok
     int &j=12; //error

    对于const引用,则可以绑定到不同但相关的类型的对象或绑定到右值。

    绑定到右值的情况如下:  

     int i=43;
     const int &r=43;  //合法
     const int &r2=r+i;  //合法

           绑定到相关类型的对象如下: 

     double dval=3.14;
     const int &ri=dval; //合法

    其实编译器会把上述代码转换成如下形式的编码:  

     int temp=dval;         //创建一个临时的变量
     const int &ri=temp;    //其实绑定到了一个临时变量对象上,对ri  的操作不会改变dval

    指针:指针实际就是地址,是标识一块内存的一个标识,通过这个标识可以对所指向的内存中的数据进行操作,指针存储在对应类型的指针变量中,注意野指针和未初始化的指针会带来安全隐患,养成良好习惯,定义指针变量时要对其初始化。指针的用处用很多,需要多加学习。


    总结一下指针与引用的区别:

    1、引用定义的时候必须初始化,而指针不是必须的,但习惯上要进行初始化

    2、引用一旦初始化之后,就只能指向初始化的对象,不能再另指向其他对象了,但指针可以

    3、都可以通过自身来直接操作指向的对象

 



 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值