下面是网上关于引用和指针区别的常见答案:

引用和指针有如下三种区别:
1 引用必须在声明时初始化,而指针不用;
2 NULL不能引用,而指针可指向NULL;
3 引用一旦声明,引用的对象不能改变(但对象的值可以改变);而指针可以随时改变指向的对象。

引用能做到的,指针也可以,但指针更危险;

(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。

(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。

(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

  从上面的区别看,引用比指针安全。从编译器的角度看,引用仅仅是一个更为安全的指针。正是因为指针非常灵活,导致指针在编程时出错的可能性也很大,可以说指针是C++中最危险的。为了在不牺牲性能的情况下,更安全的利用指针特性,C++引入了引用。故两者的区别表现为对指针的灵活特性进行限制,如初始化、合法地址、重新赋值的限制。

  下面逐条给予更多的解释:

  1)2) 为确保引用对象的有效性。引用变量声明是必须初始化,故语言尽可能限制引用变量的有效性。但是注意:语言仅是尽可能保证,并不能完全保证引用时刻有效。因为编译器做不到这点。如:a) 引用对象被无意析构;常表现为返回临时变量的引用;引用变量的生存期比引用变量短; b)用于初始化引用变量的变量并未被构造,这主要是因为使用指针初始化引用变量导致,如int* p=NULL; int& temp = *p;  上面 的语句是有效的,但是引用变量是无效的。

  上面的解释说明了,引用虽然是安全的指针,但是并非绝对安全。引用使用不当,同样是致命的。根据C++标准,无效引用将产生“不确定行为”。可能是出于性能方面的考虑,标准并未提供判断引用是否有效的办法(假定引用变量时刻有效,减少判断有效性的性能损失)。

  3) 引用变量的值不能改变。这个假定同样是为减少指针的误用。也就是说使用引用变量时不必担心出现同一个引用变量前后所指向的实际对象发生改变的可能。

那什么时候使用引用呢?

  理论上,除下面两种情况外,都可以使用引用来替代指针(引用更安全)

  一是考虑到存在不指向任何对象的可能,在这种情况下,能够设置指针为空;

  二是需要能够在不同的时刻指向不同的对象,在这种情况下,可改变指针的指向。

----------------------------------------------------

兄弟的公司:立即购--手机购物,诚信网购

欢迎转载,请注明作者和出处。

转载于:https://www.cnblogs.com/zhenjing/archive/2010/11/09/1872519.html

[C++再学习系列] 引用和指针相关推荐

  1. C++Primer学习之一引用和指针

    一.引用 引用是一种复合类型,引用分为左值引用和右值引用,其中右值引用时C++11提出来的, 常说的引用其意为左值引用.注意:引用不是对象,它是一个对象(变量)的别名,不能改变引用的对象,故必须在初始 ...

  2. [C++再学习系列] 前置++与后置++

    前置++: type operator++(); 后置++: const type operator++(int ); 为了编译器区分前置和后置++,C++规定后缀形式有一个int类型参数,当函数被调 ...

  3. [C++再学习系列] 变量的声明、定义与extern关键字

    变量的声明与定义: A definition of a variable allocates storage for thevariable and may also specify an initi ...

  4. [C++再学习系列] 虚函数的4条规则

    对于常规的基类函数来说: 1 尽量使用非虚拟接口模式(NVI)让接口函数成为非虚拟的. 2 尽量让虚函数成为私用的. 3 只有当派生类需要调用基类对某个虚函数的实现时,才把虚函数声明为保护的. 4 基 ...

  5. [C++再学习系列] 函数模板和类模板

    函数模板和类模板 C++ 提供类模板和函数模板.函数模板允许重载 ,而类模板不允许重载(类无重载概念).类模板可以进行全特化和偏特化,而函数模板仅能够全特化 .因此,写一个看似函数模板偏特化的函数模板 ...

  6. [C++再学习系列] 具有链接的C++实体

    具有链接的实体,包括名字空间级的变量和函数,都是需要分配内存的.具有链接的实体如果在源文件(cpp)中出现多次,将意味着多次分配内存,每个内存空间定义一个特定的实体.这会导致:1) 空间膨胀:2) 出 ...

  7. RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78214267 既然已经可以通过 RTSP 获取h264 裸流了.那么通过 F ...

  8. 音视频开发(17)---RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中

    RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中 https://blog.csdn.net/qq_29350001/article/details/7821426 ...

  9. 2020-09-25C++学习笔记引用2:二级指针形参与指针形参的使用方法和区别重难点,主看综合代码(1、指针形参2、引用形参3、二级指针形参4、指针引用形参)

    2020-09-25C++学习笔记引用2:二级指针形参与指针引用搭配做形参的使用方法区别重难点,注意事项主看综合代码(1.指针形参2.引用形参3.二级指针形参4.指针引用形参) 1.指针引用 #inc ...

最新文章

  1. 0.2 秒居然复制了一个 100G 文件?怎么做到的?
  2. 斯坦福大学马超:探寻「隐式偏差」的完整理论框架
  3. MVC、JSP实现mysql的增删改查功能的封装和简陋的界面交互
  4. C语言经典例30-判断回文数
  5. 一文读懂 Shell 中各种括号的作用
  6. SaaS新模式:业务、财务与支付无缝对接
  7. 【WebRTC---源码篇】(一)全局初始化
  8. java使用Executor(执行器)管理线程
  9. java读取打包时间_Java获取响应的日期时间,这样写是否合理?
  10. 智能风控中的全场景化的模型组合包括哪些内容
  11. C++学习笔记(二)——构造函数和析构函数
  12. 用QLabel实现抽奖
  13. 计算机自带游戏关闭,win10系统自带小游戏关闭的办法
  14. 体验一命通关 - Java技能树测评
  15. stm32 NVIC中断管理实现[直接操作寄存器]
  16. 《缠中说禅108课》44:小级别背驰引发大级别转折
  17. 北京地铁21号线_对接台湖地区 北京地铁17号线2022年试运营
  18. 微信小程序云开发之实时监听数据库某集合数据条数
  19. 看雪CTF.TSRC 2018 团队赛-第六题 追凶者也--拼图游戏
  20. lmdb.Error: 路径 : ϵͳ�Ҳ���ָ����·����解决办法

热门文章

  1. 模24的8421BCD码计数器(Verilog HDL语言描述)(仿真与综合)
  2. linux-RPM安装
  3. Spring2.5注释驱动与基于注释的MVC
  4. LVS集群---做前端调度器搭建使用
  5. ThinkPHP实现静态缓存和动态缓存
  6. KMP算法的理解,伪代码,c代码实现
  7. net平台c#语言如何实现支付宝payto接口
  8. Ubuntu中安装sqldeveloper出现的问题及其解决方法
  9. CentOS6.3.x86_64安装Trac
  10. 精心挑选12款优秀的 JavaScript 日历和时间选择插件