值传递 引用传递(传地址,传引用)的区别
传值
是把实参的值赋值给行参
那么对行参的修改,不会影响实参的值
传地址
是传值的一种特殊方式,只是他传递的是地址,不是普通的如int
那么传地址以后,实参和行参都指向同一个对象
传引用
真正的以地址的方式传递参数
传递以后,行参和实参都是同一个对象,只是他们名字不同而已
对行参的修改将影响实参的值
-----------------------------------------------------------------------------------
觉得从函数调用的角度理解比较好
传值:
函数参数压栈的是参数的副本。
任何的修改是在副本上作用,没有作用在原来的变量上。
传指针:
压栈的是指针变量的副本。
当你对指针解指针操作时,其值是指向原来的那个变量,所以对原来变量操作。
传引用:
压栈的是引用的副本。由于引用是指向某个变量的,对引用的操作其实就是对他指向的变量的操作。(作用和传指针一样,只是引用少了解指针的草纸)
-----------------------------------------------------------------------------------
函数参数传递机制的基本理论
函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。以下讨论称调用其他函数的函数为主调函数,被调用的函数为被调函数。
值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。
引用传递(pass-by-reference)过程中,被调函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的
实参变量。
-----------------------------------------------------------------------------------
仅讨论一下值传递和引用传递:
所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy;系统将为目标对象重新开辟一个完全相同的内存空间。
所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。
转自:http://www.cnitblog.com/guopingleee/archive/2009/02/16/54597.html
转载于:https://www.cnblogs.com/xuewangkai/p/11152377.html
值传递 引用传递(传地址,传引用)的区别相关推荐
- C/C++中传值和传地址(引用)
C/C++中参数传递有两种方式,传值或传地址(传引用),通常我们要在被调用函数中改变一个变量的值就需要传地址调用方式,例如: void swap_by_value(int a, int b) {int ...
- java能传地址吗,详解java的值传递、地址传递、引用传递
一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前的理解,java中基本数据类型是值传递,对 ...
- Java中传参数--值传递和引用传递
** Java中传参数–值传递和引用传递 ** 在Java中,传参数分为值传递和引用传递. 在Java中的数据类型分为两大类:一类是引用类型,也叫类类型(除了String以外的所有复合数据类型,包括数 ...
- 【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )
文章目录 前言 一.数组符号 [] 与 指针 * 符号 使用效果 基本等价 二.数组首地址 与 指针 本质区别 前言 参考 [C 语言]指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方 ...
- java int 传引用吗_Java的参数传递是「值传递」还是「引用传递」?
关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题. 有人说Java中只有值传递,也有人说值传递和引用传递都是存在的,比较容易让人产生疑问. 关于值传递和引用传递其实需要分情况看待. ...
- Javascript 之《函数传参到底是值传递还是引用传递》
前言 这个问题其实困惑了我好久,但是在实际使用中总是得过且过,不想去深究.由于这种态度,在学习 Javascript 过程中,水平一直都是出于半桶水状态,很多概念和原理似懂非懂,模糊不清. 所以,写了 ...
- 值传递和引用传递传的到底是啥?
作者 | 编程指北 责编 | 张文 来源 | 编程指北(ID:cs_dev) 在网上看到过很多讨论 Java.C++.Python 是值传递还是引用传递这类文章,所以这一篇呢就是想从原理讲明白关于函 ...
- java int 传引用吗_Java值传递还是引用传递?
从我实习面试开始就有在面试中遇到过这个问题:Java是值传递还是引用传递? 当时的我只会背背面试题,但是网上的答案有些还是错的,导致我决心写这一篇文章. 虽然网上已经有很多文章珠玉在前,但是我还是想写 ...
- go语言传参是值传递还是引用传递
曾经在某次go面试中被面试官问到:"go中引用类型有哪些?",我答到:"slice,map,channel",面试官:"其实go没有引用类型,都是值类 ...
最新文章
- 怎么判断网络回路_PLC控制回路故障的判断和检修方法与技巧!
- 官方iPhone SDK和开源工具链
- Linux进程的分析和执行过程
- centos 6推荐使用epel源
- Mirror--镜像使用的工作线程数
- Spring Boot定时任务-Quartz介绍
- Eclipse安装ADT失败解决办法
- char qt 转unicode_Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK 乱码与转码问题...
- 新春聊一下:技术架构与架构师角色的诸多思考
- C语言32个关键字总结
- 最近几年出现的新技术
- CGPathAddArc
- php读写明华读卡器,rwCard 明华USBIC卡读卡器IC卡读写程序 - 下载 - 搜珍网
- Adobe Premiere(Pr视频剪辑)下载安装
- java入门基础学习
- 无纸化会议-安全初步
- 简谈FPGA的上电复位
- 漫威迷福利:新加坡杜莎夫人蜡像馆漫威4D体验馆
- 如何给PDF文件文本添加绿色下划线?PDF下划线工具怎么用?
- 炸锅了!删库跑路把“开源”推上了风口浪尖~
热门文章
- 关于for中思维卡机的小悲剧
- javascript权威指南学习笔记
- linux问答学知识
- spring入门(12)-spring与hibernate整合完成增删改查的操作(继承HibernateDaoSupport调用hibernateTemplate类)
- MYSQL_使用外键约束(constraint)或触发器(trigger)来进行级联更新、删除
- 九度OJ 朋友圈 并查集
- golang并发和并行
- IAR中断定义#pragma vector = P0INT_VECTOR __interrupt void P0_ISR(void)啥意思?
- 树莓派上搭建Git服务器
- Java:带符号右移和无符号右移