zoukankan      html  css  js  c++  java
  • 指针与引用同与不同

    一、指针与引用的定义及特性

      A、引用(reference):为一个已经存在的对象另起一个名字。它有以下特性:

      1.必须初始化

      2.始终指向同一个对象,不能更改其所指向的对象

      3.自身只是一个别名,不占内存,对其取地址是其指向对象的地址

      4.常量引用的意义在于不能通过引用来修改其所指向对象的值,其所指对象可以不是常量

        int tempA = 2;
        const int ctempA = 2;
    
        /*1.正常使用*/
        int &refA = tempA;
        const int &crefA = ctempA;
        /*2.常量引用可以指向普通对象*/
        const int &crefB = tempA;
        /*3.引用的地址是所指对象的地址,三者相同*/
        cout<<"&tempA = "<<&tempA<<endl;
        cout<<"&refA  = "<<&refA<<endl;
        cout<<"&crefB = "<<&crefB<<endl;
        /*4.crefC指向一个临时对象,其对象被引用接管了*/
        const int&crefC = 3;
        /*5.没有临时对象产生,编译不过*/
        int &refC = 3;
        /*6.没有进行初始化,编译不过*/
        int &refB;
        /*7.普通引用不能指向常对象,编译不过*/
        int &refD = ctempA;

      B、指针(pointer):一个普通变量,其内容为一块地址。引用相比它有以下特性:

      1.可以不被初始化

      2.生命周期里可以更改所指向的地址

      3.自身也是一个对象,自己占一块内存,对其取地址得到其所占内存的地址

      4.指针的常量性分为:顶层const(指针本身是个常量)和底层const(指针所指的对象是一个常量)

        int tempA = 2;
        const int ctempA = 2;
    
        /*1.下列定义分别为:普通指针、顶层const指针、底层const指针和const指针*/
        int *ptrA;
        int * const topLevelConstPtrA = &tempA;
        const int *lowLevelConstPtrA;
        const int * const constPtrA = &ctempA;
        /*2.使用过程中对其赋值*/
        ptrA = &tempA;
        /*3.三者一样,指针保存着所指对象的地址*/
        cout<<"&tempA    = "<<&tempA<<endl;
        cout<<"ptrA        = "<<ptrA<<endl;
        cout<<"topLevelConstPtrA = "<<topLevelConstPtrA<<endl;
        /*4.三者不一样,指针有自己的内存*/
        cout<<"&tempA    = "<<&tempA<<endl;
        cout<<"&ptrA    = "<<&ptrA<<endl;
        cout<<"&topLevelConstPtrA = "<<&topLevelConstPtrA<<endl;

     二、指针与引用的个人理解

      1.唯一的共同使用场景是在函数参数传递中,为了避免拷贝构造带来的性能影响或者不能进行拷贝,这时就需要进行传引用或者传指针来代替。

      2.优先使用引用,引用使用起来更直接和简单;

      3.指针功能更强大,但是也更容易用错,底层const顶层const就能让一些人犯晕。

      4.确定不改变其传入参数时,请加上const,传入const引用或底层const

      5.有指向指针的引用,但是没有指向引用的指针(引用自身不占内存)

      6.存在数组的引用,但是没有引用的数组

  • 相关阅读:
    [转]大话企业级Android应用开发实战 用户界面
    [转]大话企业级Android应用开发实战 Activity
    logcat
    [转]大话企业级Android应用开发实战 2D图形
    戴尔R710服务器USC安装linux系统(转载)
    p4n 今天与朋友沟通支付云服务普及以及跨境电子商务的光辉前景
    atitit.研发管理标准化流程总结java开发环境与项目部署环境的搭建工具包总结
    atitit.产品console 日志的aticonsole 方案处理总结
    atitit. 研发管理如何根据自己的特挑选 产业、行业、职业、岗位与自己发展的关系
    Atitit.404错误解决标准流程and url汉字中文路径404错误resin4 resin chinese char path 404 err解决
  • 原文地址:https://www.cnblogs.com/cauchy007/p/4965155.html
Copyright © 2011-2022 走看看