zoukankan      html  css  js  c++  java
  • 【C++】指针和引用

    转自alice4C++中指针和引用的区别比较

    指针

      指针是编程语言中的一个对象,它的值是一个地址直接指向内存中另一个地方。

    引用

      引用就是某一变量(对象)的一个别名,对引用的操作与对变量直接操作完全一样

    指针和引用的区别

      1.指针是一个实体,而引用仅是个别名;

      2.引用必须被初始化且必须从一而终(可将引用看做常量指针),指针都可不必;

      3.可以有const指针,但是没有const引用;

      4.引用不能为空,指针可以为空;

      5.“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;

      6.指针和引用的自增(++)运算意义不一样; 指针自增指向下一个地址,而引用是对变量本身的值的增加。

      7.指针可以有多级,但是引用只能是一级(可以定义引用的引用,int i; int& ir = i; int &irr = ir,但这都是一级),例如int **p是合法的,而 int &&a是右值引用; 

    指针和引用的相同点

      两者都是地址的概念,指针指向一块儿内存,其内容为所指内存的地址;引用是某块儿内存的别名。底层可将引用看做常量指针,即指向的地址必须被初始化且不再发生改变的指针。

    注意引用作为返回值

      1.不能返回局部变量的引用,主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。

      2.返回函数内部new分配的内存的引用,可能有内存泄露的风险。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成内存泄漏。

    使用指针和引用的情况对比

      1.是考虑到存在不指向任何对象的可能(在这种情况下,能够设置指针为空)

      2.需要能够在不同的时刻指向不同的对象(在这种情况下,能改变指针的指向)。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么就应该使用引用。

      3.重载某个操作符时,应该使用引用。当你知道你必须指向一个对象并且不想改变其指向时,或者在重载操作符并为防止不必要的语义误解时,你不应该使用指针。而在除此之外的其他情况下,则应使用指针。

  • 相关阅读:
    PAT B1027 打印沙漏 (20 分)
    PAT B1025 反转链表 (25 分)
    PAT B1022 D进制的A+B (20 分)
    PAT B1018 锤子剪刀布 (20 分)
    PAT B1017 A除以B (20 分)
    PAT B1015 德才论 (25 分)
    PAT B1013 数素数 (20 分)
    PAT B1010 一元多项式求导 (25 分)
    HDU 1405 The Last Practice
    HDU 1165 Eddy's research II
  • 原文地址:https://www.cnblogs.com/chen-cs/p/13097495.html
Copyright © 2011-2022 走看看