一、指针和引用的定义和性质区别:

(1) 指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元,即指针是一个实体;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:

int a=1;int *p=&a;int a=1;int &b=a;

上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。

而下面两句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单元。

(2) 指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;

(3) 指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了,从一而终。

(4)”sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小;

(5)指针和引用的自增(++)运算意义不一样;

二、相同点

都是地址的概念;

指针指向一块内存,它的内容是所指内存的地址;

引用是某块内存的别名。

三、联系

1、对一般应用而言,把引用理解为指针,不会犯严重语义错误。引用是操作受限了的指针(仅容许取内容操作)。

引用是C++中的概念,初学者容易把引用和指针混淆一起。以下程序中,n是m的一个引用(reference),m 是被引用物(referent)。

int m;
int &n = m;

n 相当于m 的别名(绰号),对n 的任何操作就是对m 的操作。

引用的一些规则如下:

(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL 引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

以下示例程序中,k 被初始化为i 的引用。语句k = j 是把k 的值改变成为6,由于k 是i 的引用,所以i 的值也变成了6.

int i = 5;
int j = 6;
int &k = i;
k = j; // k 和i 的值都变成了6

上面的程序看起来象在玩文字游戏,没有体现出引用的价值。引用的主要功能是传递函数的参数和返回值。C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。

“引用传递”的性质像“指针传递”,而书写方式像“值传递”。实际上“引用”可以做的任何事情“指针”也都能够做,为什么还要“引用”这东西?

答案是“用适当的工具做恰如其分的工作”。

指针能够毫无约束地操作内存中的如何东西,尽管指针功能强大,但是非常危险。

就象一把刀,它可以用来砍树、裁纸、修指甲、理发等等,谁敢这样用?

如果的确只需要借用一下某个对象的“别名”,那么就用“引用”,而不要用“指针”,以免发生意外。比如说,某人需要一份证明,本来在文件上盖上公章的印子就行了,如果把取公章的钥匙交给他,那么他就获得了不该有的权利。

2.总的来说,在以下情况下你应该使用指针:

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

二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用。

还有一种情况,就是当你重载某个操作符时,你应该使用引用。

尽可能使用引用,不得已时使用指针。

当你不需要“重新指向”时,引用一般优先于指针被选用。这通常意味着引用用于类的公有接口时更有用。引用出现的典型场合是对象的表面,而指针用于对象内部。

文章参考来源:https://blog.csdn.net/qnavy123/article/details/82183586

面试题——谈谈指针和引用的区别相关推荐

  1. c++值传递,指针传递,引用传递以及指针与引用的区别

    值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值.从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入, 不能传出.当函数内部需要修改参数,并且不希望这个改变影 ...

  2. 24.指针和引用的区别

    在面试时经常会被问到 指针和引用的区别,虽然问题很简单但还是总结一下! 指针和引用的区别其实有太多了,主要的区别大概是这样子: 1)指针声明的时候可以不被初始化(有可能成为野指针),但是引用必须要进行 ...

  3. 2020-12-6(从反汇编理解指针和引用的区别)

    这是我10个月前看到的一篇博客吧,感觉分析指针和引用的文章这是我目前见过讲解得最清晰的一篇: 本文主要基于反汇编代码,从初始化.赋值以及取地址三个角度来理解指针和引用的区别. 初始化 写出以下代码并查 ...

  4. C/C++ 中指针和引用的区别

    C/C++ 中指针和引用的区别 1.指针有自己的一块空间,而引用只是一个别名: 2.使用 sizeof 看一个指针的大小是 4,而引用则是被引用对象的大小: 3.指针可以被初始化为 NULL,而引用必 ...

  5. 【转】指针和引用的区别

    c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使 ...

  6. python指针引用的区别_C++基础:指针和引用的区别

    C++基础:指针和引用的区别 *例 int a; int &b = a; 其中b是a的引用,b引用了a,a被b引用.b 相当于 a 的别名,对 b 的任何操作就是对a的操作.所以b既不是a的拷 ...

  7. C++中指针与引用的区别

    指针的本质 指针p也是对象,只不过p存储的数据类型是它所指的对象的地址.可以通过解引用操作符""来访问对象的值,即p. 对象有常量(const)和非常量之分,如果指针本身是常量,即 ...

  8. C++指针和引用的区别

    从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有 ...

  9. C++中指针和引用的区别与联系

    原文地址:http://blog.csdn.net/thisispan/article/details/7456169 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址 ...

最新文章

  1. 武汉大学提出ARGAN:注意力循环生成对抗模型用于检测、去除图像阴影 | ICCV 2019
  2. QT QTableWidget 用法总结
  3. Android官方开发文档Training系列课程中文版:通知用户之构建通知
  4. 2016.9.9《Oracle查询优化改写技巧与案例》电子工业出版社一书中的技巧
  5. 图解高内聚与低耦合,傻瓜都能看懂!
  6. 使用Docker-容器命令案例2
  7. java 字符串指定编码输出_java对字符的编码处理
  8. c#调用c++ dll const char* String类型转换问题。传值,与接收返回值问题
  9. 射线包含于凸集的充要条件
  10. 车间能量看板设计需求,能给个思路吗
  11. 联想服务器安装win10系统安装教程,联想笔记本安装win10系统图文教程
  12. CF679A.Bear and Prime 100 (交互题)
  13. 老款Mac装win10黑屏或灰屏
  14. PL2303GT USB to RS232 Serial Bridge Controller (Built in RS232 XCVR)驱动地址
  15. 3Dtouch 基本原理
  16. 完全拷贝的一份,程序员阅读书单
  17. mysql truncated_mysql数据截断
  18. clr错误 8004005程序将立即终止是什么原因 | clr80004005错误修复方法
  19. WMS云端转型 势在必行
  20. Powermill编程和UG编程的区别

热门文章

  1. 做新媒体短视频运营死路一条
  2. 计算机内存损坏,电脑内存条损坏怎么办 电脑内存条损坏原因及解决方法
  3. 世上本没有路,只是走的人多了就成了路 2016我的年终总结
  4. 如何用excel设置多条件自动判断得出结果?
  5. Java实习生面试题与笔试题
  6. 共享锁(Shared Lock)
  7. aspen求理论塔板数_Aspen中塔设计步骤
  8. web应用程序与web网站的区别
  9. bootstrap4常用样式(仅供参考)
  10. 系统架构设计方法论——Zachman框架模型