`
moxiaomomo
  • 浏览: 44139 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

C++中指针和引用的区别

    博客分类:
  • C++
阅读更多
C++中参数传递的方式有三种:传值,传引用和传指针。
其实后两种方式是相似的,被作为参数传递的变量的内容都可能会发生变化。
但他们之间也是有明显的区别的:

1.引用在创建时必须要进行初始化(必须引用有效对象),而指针可以在定义后的
  任何地方重新赋值。

2.不存在空引用(NULL),要关联到合法的存储空间。而指针可以置为NULL。

3.引用一旦被初始化到引用某个对象,它就不能被改变到引用另外一个对象;而给引用赋值并不会改变它与院士对象的绑定关系。
  除了指针常量,指针在在任何时候可以可以指向另一个对象。

总的来说,引用和指针的效率都比较高,引用也具备更高的安全性。

引用别的资料:
①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。

② 从内存分配上看,程序为指针变量分配内存区域,而不为引用分配内存区域,因为引用声明时必须初始化,从而指向一个已经存在的对象。引用不能指向空值。

③ 从编译上看,程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。这是使用指针不安全而使用引用安全的主要原因。从某种意义上来说引用可以被认为是不能改变的指针。

④不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。

⑤理论上,对于指针的级数没有限制,但是引用只能是一级。如下:
  int** p1; // 合法。指向指针的指针
  int*& p2; // 合法。指向指针的引用
  int&* p3; // 非法。指向引用的指针是非法的
  int&& p4; // 非法。指向引用的引用是非法的
  注意上述读法是从左到右。

详细参考资料:
[url]http://patmusing.blog.163.com/blog/static/135834960200911308413342/ [/url]
分享到:
评论

相关推荐

    c++中指针和引用的区别

    指针和引用的区别,C++中指针和引用,初学者容易混淆。

    C++中指针和引用的区别详解

    主要介绍了C++中指针和引用的区别详解的相关资料,需要的朋友可以参考下

    C++ 中指针和引用有什么区别详解

    主要介绍了C++ 中指针和引用有什么区别详解的相关资料,需要的朋友可以参考下

    详解C++中指针和引用的区别

    主要介绍了C++中指针和引用的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    C++中指针和引用的区别分析

    主要介绍了C++中指针和引用的区别,有需要的朋友可以参考一下

    C++指针与引用

    C++指针与引用,专门讲述c++中指针与引用的区别与使用。

    简单谈谈C++中指针与引用的区别

    指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法

    c++中引用和指针的区别和联系

    C++中的引用和指针 ★ 相同点: 1. 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名(java中的引用其实也是别名的意思)。 ★ 区别: 1. 指针是一个实体,而引用仅是个别名;2. ...

    C/C++中指针和引用之相关问题深入研究

    它们的区别:①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,...

    C/C++中指针和引用之相关问题研究

    它们的区别:①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,...

    c++指针和引用的使用浅谈

    通过数个例子,很清晰的比较了C++中指针与应用的用法和区别。

    简单谈谈C++ 中指针与引用

    指针和引用形式上很好区别,但是他们似乎有相同的功能,都能够直接引用对象,对其进行直接的操作。但是什么时候使用指针?什么时候使用引用呢?这两者很容易混淆,在此我详细介绍一下指针和引用,力争将最真实的一面...

Global site tag (gtag.js) - Google Analytics