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

  • 相关阅读:
    集合---Map
    一个机器部署多个tomcat
    JavaScript要不要加分号";"
    Nodejs 路径 /, ./, ../, ..// 的区别
    玩转Vue的24个小程序---基础篇
    如何创建Node.js Web服务器
    为什么Ajax XMLHttpRequest POST方法传递参数失败了
    字典元素如何遍历
    Beautiful Soup 如何获取到href
    如何查看Ajax请求
  • 原文地址:https://www.cnblogs.com/chen-cs/p/13097495.html
Copyright © 2011-2022 走看看