加载中…
个人资料
梁斌
梁斌
  • 博客等级:
  • 博客积分:0
  • 博客访问:408,543
  • 关注人气:1,097
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

指针和引用的区别

(2013-02-07 20:59:22)
    最近我有个朋友面试遇到这个问题,答得比较写意,反而被认为是不够专业,这个问题吧,我把它浓缩一下,希望对找工作面试的朋友,有帮助。
     指针和引用的区别
     上面这个代码,a是整形变量,b是整形引用,c是整形指针。
     从上面这个gdb过程,可以看出
     1)引用类型的变量,是所引用变量的一个别名。
    2)指针类型的变量,本身是一个地址,这个地址上存放的值,才是指向地址的值
    例如先后对a,赋值0,1,2 然后查看该地址的存放的值,也均发生了变化,也就是说p的地址0x7fffffffe40c不变,但地址上存放的值变了,即p不变,*p变了。
    
    在实战中主要区别在哪里呢?
    I
    1)引用类型的变量,一次引用,终生不能再引别人了,比如b引用了a,不能再引用XX了。
    2)指针类型的变量,想怎么指,怎么指,这会指这里,那会指哪里,其实就是地址的修改,自由度大。

     II
    1) 引用类型的变量,放心,绝对不需要考虑释放的问题,也绝对不可能NULL,引用必有内容
    2) 指针类型的变量,危险,要考虑释放的问题,有可能是NULL。
    
    III
    1) 在很多时候指针和引用可以相互替换,但引用更简洁,例如:
       void funA( int *p)
       {
              *p = 1;
       };
       void funB( int &p)
       {
              p = 1;
        };
       
       int main(void)
       {
              int a = 0;
              funA(&a);
              funB(a);
        }  
       funA和funB的功用是相当的,但是可以感觉到引用更加自然。
      再比如一个二维数组的引用和指针,也可感觉到引用更加自然。
       typedef int aa_r_t [2][2];
       typedef int aa_p_t [2];

       int main(void)
       {
        int aa[2][2]={{0,1},{2,3}};
        aa_r_t& pr = aa;
        aa_p_t* pp = aa;

        return 0;
        }
        

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有