• 【C++】指针和引用


    引用:

      引用(reference)是为对象起了另外一个名字,引用类型应用(refers to)另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名。

      一般初始化变量时,初始值会被拷贝到新建的对象中。然而定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和他的初始值对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,因此引用必须初始化。

    指针:

      指针(pointer)是“指向(point to)”另外一种类型的符合类型。与引用类似,指针也实现了对其他对象的间接访问。然而指针与引用相比又有很多不同。

      其一。指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。

      其二,指针无须再定义时赋初值。和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。

      指针值:

      指针的值(即地址)应属于下列4种状态之一:

      1.  指向一个对象。

      2.  指向紧邻对象所占空间的下一个位置。

      3.  空指针,意味着指针没有指向任何对象。

      4.  无效指针,也就是上述情况之外的其他值。

      void* 指针:

        void*指针式一种特殊的指针类型,可用于存放任意对象的自地址。一个void*指针存放着一个地址,这一点和其他指针类似。不同的是,我们对该地址中到底是个什么类型对象并不了解:

    double obj = 3.14, *pd = &obj;    
    
    void *pv = &obj;    //obj可以是任意类型的对象
    pv = pd;    //pv可以存放任意类型的指针


    利用void*指针能做到的事儿比较有限:拿它和别的指针比较,作为函数的输入或输出、或者赋值给另外一个void*指针。不能直接操作void*指针所指向的对象,因为我们并不知道这个对象到底是什么类型,也就无法确定能在这个对象上做哪些操作。

      概括来说,以void*的视角来看内存也就仅仅是内存空间,没办法访问内存中所存的对象。

    指针和对象的区别:

      1.  指针可以为空,引用不能。

      2.  指针可以被重新赋值而引用在初始化后就不能改变绑定对象

      3.  指针有自己的内存地址,而引用没有,它仅仅是一个别名。 

      4.  引用必须初始化,指针不必。

      

    参考资料:

      1.  http://stackoverflow.com/questions/57483/what-are-the-differences-between-a-pointer-variable-and-a-reference-variable-in

      2.  《C++ Primer》(第五版)2.3  电子工业出版社

  • 相关阅读:
    221. Add Two Numbers II【medium】
    167. Add Two Numbers【easy】
    544. Top k Largest Numbers【medium】
    413. Reverse Integer【easy】
    219. Insert Node in Sorted Linked List【Naive】
    java发展史与java的语言特性
    MySQL级联删除的问题
    mac上创建MySQL的基本步骤
    MySQL中的约束简单使用
    MySQL的中文编码问题
  • 原文地址:https://www.cnblogs.com/vincently/p/4754549.html
Copyright © 2020-2023  润新知