• 引用 与 指针


      我们知道,引用 和 指针都是C++的符合类型之一。

    一  关于引用

      引用(reference) 是为对象起了另外一个名字,引用类型 引用  另外一种类型。

      和初始化变量不同的是, 在定义引用的时候,程序把引用和它的初始值  绑定 在一起,而不是把初始值拷贝给引用。两者是绑定在一起,那么,就可以通过引用去修改初始值

    例: int val = 20; int &ri = val ; ri  = 82; 那么此时val的值也会更改为82,反之成立。

      一但初始化完成,引用将和它的初始值对象一直绑定在一起,无法重新绑定其他的对象,因此,引用必须初始化。形如  int &ri ;就是错误的 ,因为其没有初始化。

      tip1: 引用的本身并不是对象,所以无法定义引用的引用。

      tip2 : 引用必须绑定在一个对象上,引用类型的初始值必须是一个对象。  int &ref = 0 ; //错误 ,引用类型的初始值必须是一个对象。

    二 关于引用的部分使用

      1、传递可变参数

        函数参数不具备传递值得作用,我们可以通过引用的使用来传递可变参数。

      2、给函数传递大型对象
        当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高,因为引用并不产生对象的
      副本,也就是参数传递时,对象无须复制。可以极大的节省内存使用。
     
    三 关于指针
      指针 与引用类似,也能完成对其他的对象的间接访问。
      但是, ① 指针本身是一个对象,允许指针赋值和拷贝,而且在其生命周期内允许指向多个不同的对象。②指针无须在定义时赋初值。
      指针  本身存放的是一个对象的 地址。如果有这样的代码  int a = 20; int *p = a; std::cout << p; 会输出一个地址给你 。而且其在获取对象的地址的时候,需在对象前面加上一个取地址符“&”;tip : 注意其和引用的区别。
     
      tip : 我们从上文中可以知道,引用本身并不是一个对象,所以无法定义指向引用的指针。这点也可以侧面说明对象前面的 & 不是取地址符。
      tip  : 值得注意的是,除特殊的情况外, 其他所有指针的类型都必须和它所指向对象严格匹配。如果不匹配,操作会出现错误。
     
    建议:
      建议初始化所有的指针!
        虽然说到指针在定义时无须赋初始值,但是使用未定义的指针会造成程序运行错误,且其后果无法预计, 一般会造成程序崩溃。在多数的编译器环境下,其会将未初始化的指针所占内存空间的当前内容看成一个地址值,访问该指针,相当于去访问一个本不存在的位置上的本不存在的对象,如果这个位置本来有内容,那么找错误就非常的麻烦了。
     
      这里特别提一下  void* 指针。
      这是一种特殊的指针类型,可以用于存放任意对象的地址,一一对应。概括来说,void*  的视角来看内存空间也就仅仅是内存空间,没办法访问。
     
    tip : 指针通常难以理解,即使是有经验的程序猿也常常因为调试指针引发的错误而备受折磨。
     参考书籍 《c++ primer》
  • 相关阅读:
    【shell】两种字符串提取场景的实现
    【batch】批处理文件多参数处理和for循环字符串连接
    【Java】「深入理解Java虚拟机」学习笔记(4)- 类文件结构
    【Java】「深入理解Java虚拟机」学习笔记(2)- JVM内存区域
    【Java】「深入理解Java虚拟机」学习笔记(1)
    【Myeclipse】用Myeclipse10.5搭建C/C++开发环境
    【JDK】JDK模块化(1)-为什么要模块化
    【DOS】文件统计命令
    【java】转:Windows系统下面多个jdk版本切换
    【Web】servlet、filter和listener
  • 原文地址:https://www.cnblogs.com/erhuoL/p/5851198.html
Copyright © 2020-2023  润新知