Onelong

分享知识,与你一起进步......
RSS icon Home icon
  • 【转】C++指针与引用的本质区别

    post by onelong / 2012-3-15 14:55 Thursday [C++]

    今天看书的时候,看到指针和引用,突然想他们本质的区别是什么呢?百度一轮,看到下面文章:

     

    //看如下例子:

     

    int a = 0;              // int型变量a
    int *pI = &a;           // 指向int型的指针变量pI
    int& rI = a;            // int型的引用rI,引用的变量为a
    int& rT = *(int*)0x01;  // int型的引用rT,引用的内存地址为0x01

     

    到了编译器,产生四个符号,a,pI,rI,rT.
    rT标示了一块内存,这块内存地址为0x01
    a和rI完全一样,他们标示了一块int的内存比如0x0012ff70,其内容为00000000
    pI首先为一个变量,它有自身的内存地址,即pI标示了一块内存,比如0x0012ff6c.其内容极为a所标示的内存地址0x0012ff70
    由于程序语言的设计,引用rI只有在声明时才有机会初始化(也必须初始化),即告知编译器该引用引用的是哪一块内存(或变量).因为一旦声明结束,之后看到该引用时,等同于它所引用的那块内存(或变量)
    而指针,由于其本身为一个变量,一般情况下都是可以改变这个变量的值的.所以,理论上可以使用一个指针,通过改变指针变量本身的值,来(简介)访问,或者修改任何一块内存,所以指针功能强大,同样也相当危险

    一般,引用总是引用一个有意义的变量.像int& rI = a;使用,这样的话,引用一般是比较安全的.所以很多书上都说引用无需判断其有效性.
    但是同样int& rT = *(int*)0x01;的使用一般也是没有编译问题的.所以,如果引用在使用不当的时候,跟指针的危险性几乎是一样的.

    问过很多人,指针和引用是一样的.我相信他们都是高手.至少,对于C++有着相当的认识.

    http://blog.csdn.net/dingo1220/article/details/5808829

    指针: 
            当用这种方法时,会生成一个COPY,改变数值,从而指针得到的是副本,函数退出就回到原来的值 
    引用: 
            此时直接使用内存中的变量,不生成副本 
    引用是从指针中扩展出来的,但不同与指针

    标签: c c++
    引用地址:
     

    我要评论