zoukankan      html  css  js  c++  java
  • 引用和指针的比较

    以下内容摘抄自:高质量程序设计指南:C++C语言(第三版) 林锐 P152

    引用符号:“&”

    在此并非取地址的意思。

    int m;

    int& n=m;

    n是变量m的一个引用(Reference),m是被引用物(Referent).

    n相当于m的别名,对n的任何操作都是对m的操作。所以n既不是m的拷贝,也不是指向m的指针,其实n就是m自己。

    引用的特性及其与指针的比较如下:

    1.引用在创建的同时必须初始化,即引用到一个有效的对象。而指针在定义的时候不必初始化,可以在定义的任何地方重新赋值。

    2.不存在NULL引用, 引用必须与合法的存储单元关联;而指针则可以是NULL。如果把一个引用初始化为0,例如:

    const int& rInt = 0;

    其语义并非是把引用初始化为NULL,而是创建一个临时的int对象,并用0来初始化它,然后再用它来初始化引用rInt,该临时对象将会一直保留到rInt销毁的时候才销毁。

    所以,不要用字面常量来初始化引用

    3.引用一旦被初始化为指向一个对象,它就不能被改变为对另一个对象的引用;而指针在任何时候都可以改变为指向另一个对象,给引用赋值并不是改变它和原始对象的绑定关系,例如:

     int  a = 10, b = 1000;

    int& rInt = a;  //rInt 引用到a, rInt = 10;

    rInt = b;    //rInt 和a 都变成了 1000;

    这并非是让rInt改变初衷而引用到变量b,而是把b的值赋值给变量a,以后对rInt的使用仍然是在使用a而不是b。相反,指针就不大一样了,例如:

    int *pInt = &a; //pInt指向变量a 

    pInt = &b;

    4、引用的创建和销毁并不会调用类的拷贝构造函数和析构函数。

    5、在语言层面,引用的用法和对象一样;在二进制层面,引用一般都是通过指针来实现的,只不过编译器帮我们完成了转换。

    引用的主要用途是修饰函数的形参和返回值。C++语言中,函数的参数和返回值的传递方式有三种:值传递,指针传递和引用传递。

    引用既具有指针的效率,又具有变量使用的方便性和直观性。

  • 相关阅读:
    HDU Railroad (记忆化)
    HDU 1227 Fast Food
    HDU 3008 Warcraft
    asp vbscript 检测客户端浏览器和操作系统(也可以易于升级到ASP.NET)
    Csharp 讀取大文本文件數據到DataTable中,大批量插入到數據庫中
    csharp 在万年历中计算显示农历日子出错
    csharp create ICS file extension
    CSS DIV Shadow
    DataTable search keyword
    User select fontface/color/size/backgroundColor设置 字体,颜色,大小,背景色兼容主流浏览器
  • 原文地址:https://www.cnblogs.com/zhehan54/p/5128632.html
Copyright © 2011-2022 走看看