博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
值 引用 指针概念区别汇总
阅读量:6933 次
发布时间:2019-06-27

本文共 1062 字,大约阅读时间需要 3 分钟。

传值和传引用的概念

传值(pass by value):即形参接收实参传递过来的值,如果是自定义类型,要调用拷贝构造函数。函数处理的是形参的值。

传引用(pass by reference):引用表示与原对象完全相同,是同一个对象。若函数的形参是引用,则实参与形参间不存在参数传递,且函数内对形参的修改就是修改实参,因为它们是引用关系,是同一个对象

 

语言应用

  • C语言中,传递的参数类型只有1个:传值,包括传递普通数值和指针。
  • C++中,传递的参数类型有2个:传值、传引用
  • java中,传递的类型只有1个:传值。java中传的值包括:基本数据类型和对象,其中对象当做指针看待

三种语言的处理方法相同: 不管传递的是普通变量还是指针,都是传值。对于指针,看函数修改的是指针的值,还是指针所指对象的值就可以了。

 

引用和指针主要区别

(1)引用被创建的同时必须被初始化,指针则可以在任何时候被初始化。  

(2)不能有NULL引用,引用必须与合法的存储单元关联,指针则可以是NULL)。  

(3)一旦引用被初始化,就不能改变引用的关系,指针则可以随时改变所指的对象。 

 

函数参数传递机制的基本理论

  函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。以下讨论称调用其他函数的函数为主调函数,被调用的函数为被调函数。
  值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。
  引用传递(pass-by-reference)过程中,被调函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的 实参变量。

 

小结

   1、 C++中传值(特别是对于自定义类型),会带来拷贝构造函数执行的开销,所以执行效率低一点。传引用和传指针,不执行拷贝构造函数,效率会高

   2、 当用按值传递方式传递或返回一个对象时,编译器会自动调用拷贝构造函数!

   3、 当指针作为形参时,最好画出指针所指向的对象。然后分析修改的是指针的值,还是指针所指的对象。

 

转载地址:http://nbgjl.baihongyu.com/

你可能感兴趣的文章
了解了解一下SQLSERVER里的鬼影记录
查看>>
PHP5.4新特性(转)
查看>>
(八)适配器模式详解
查看>>
Android实现导航菜单随着ListView联动,当导航菜单遇到顶部菜单时停止在哪里,并且listview仍能滑动...
查看>>
Hopcroft-Karp算法模版
查看>>
【POJ】2828 Buy Tickets(线段树+特殊的技巧/splay)
查看>>
推荐ThinkJS
查看>>
javaScript事件(二)事件处理程序
查看>>
数据库——修改表信息(转)
查看>>
SQL 存储过程 解析XML
查看>>
Atitit.木马病毒自动启动-------------win7计划任务的管理
查看>>
Javascript学习总结三(Array对象的用法)
查看>>
hiho_1050_树中的最长路
查看>>
Centos6.5搭建java开发环境
查看>>
08Spring_Spring和junit测试集成
查看>>
ArcGIS API for Silverlight 点沿着线流动
查看>>
在kali linux之下安装wps之后 报错字体缺失
查看>>
rem计算适配
查看>>
MySQL主主双机负载均衡
查看>>
EL与OGNL以及值栈的理解
查看>>