zoukankan      html  css  js  c++  java
  • 引用和指针的一些细节

    引用和指针是C++中易于混淆的概念。

    这里从基础概念说起:指针p是对象,和普通变量一样有地址(&p)和值(p),而值p存储的数据类型是数据的地址,以此达到指向其他变量的目的。(访问指向的值用解引用操作符“ * ”)。

    而指针有常量指针和指向常量的指针之分,常量指针既是不可改变值的指针(也就是不改变指向的变量),指向常量的指针(也叫指针常量)不能改变(指针指向的)对象的值。


    而引用(reference)可以理解为变量的别名,比方说小明,他的小名(别名)叫明明,那么“明明”就是引用。

    引用相较于指针,有一些特性:

    [1]指针可以为空(null),而引用不行,引用一定义就必须要初始化(绑定对象)。

    [2]引用类似于常量指针,不可改变值,一旦绑定就不可再重新和其他对象绑定(而不是拷贝)在一起了。(就好像“明明”只能是小明的小名,不能是其他人的小名)。

    而[1]的特性也就决定了:拿到一个引用的时候,不用判断非空;而拿到指针的时候,为了稳健和安全,通常需要判断指针空与否。

    那么为什么要引入引用呢?

    这里贴一个Stroustrup的FAQ:

    Why does C++ have both pointers and references?

    C++ inherited pointers from C, so I couldn't remove them without causing serious compatibility problems. References are useful for several things, but the direct reason I introduced them in C++ was to support operator overloading

    很明显了,指针是从c继承下来的,防止出现兼容性问题,而引用有很多用处,但主要用处是为了操作符重载。

    原来人类的悲欢并不相通, 我只觉得他们吵闹。
  • 相关阅读:
    matlab基础知识
    reverse number
    C++基础知识(一)
    ES6 let const学习
    [ZZ]一名IT从业者的英语口语能力成长路径
    使用windows Live Writer 以及office word 2013发布文章到博客园总结
    CString.format的用法
    Cstring 与 string 注意点
    卡尔曼滤波应用
    linux 重新挂载分区(教程)
  • 原文地址:https://www.cnblogs.com/zhlabcd/p/11274195.html
Copyright © 2011-2022 走看看