• 指针与引用同与不同


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

      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.存在数组的引用,但是没有引用的数组

  • 相关阅读:
    HTML5/CSS3滑块动画菜单
    基于HTML5手机登录注册表单代码
    基于HTML5手机上下滑动翻页特效
    基于jQuery+HTML5页面整屏滑动切换代码
    基于html5可拖拽图片循环滚动切换
    基于html5背景图片自适应代码是一款背景不随滚动条滚动,会根据分辨率不同自动匹配对应的背景图片
    HTML5实现摇一摇
    html5桌面通知,notification的使用,右下角出现通知框
    html5全局属性
    HTML5 QQ登录背景动态图片
  • 原文地址:https://www.cnblogs.com/cauchy007/p/4965155.html
Copyright © 2020-2023  润新知