传值与传地址的区别

转载 2012年03月21日 22:31:43
传值,
是把实参的值赋值给行参
那么对行参的修改,不会影响实参的值

传地址
是传值的一种特殊方式,只是他传递的是地址,不是普通的如int
那么传地址以后,实参和行参都指向同一个对象

传引用
真正的以地址的方式传递参数
传递以后,行参和实参都是同一个对象,只是他们名字不同而已
对行参的修改将影响实参的值
-----------------------------------------------------------------------------------
觉得从函数调用的角度理解比较好

传值:
函数参数压栈的是参数的副本。
任何的修改是在副本上作用,没有作用在原来的变量上。

传指针:
压栈的是指针变量的副本。
当你对指针解指针操作时,其值是指向原来的那个变量,所以对原来变量操作。

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

仅讨论一下值传递和引用:
所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy;系统将为目标对象重新开辟一个完全相同的内存空间。
所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。

传值与传址的区别与优缺点

第一次写博客,可能有点乱,那么我们就从一个实例开始吧 目标:以一个简单的实例为例,编写一个函数实现交换两个变量的数值先看正确的方法,以C语言为例 #include void f(int* x,...
  • sunruihua0522
  • sunruihua0522
  • 2013年12月12日 23:55
  • 951

java 中的 传值 与 传址

java 中的 传值 与 传址在一些面试企业的过程当中 ,很多人看重于基础的考核。其中,传值与传地址 就是一种基础能力考核的关键,这里我总结了 5种很典型的例子 ,最后做了一个总结 首先是8种基本数据...
  • sinat_30162657
  • sinat_30162657
  • 2016年07月15日 00:19
  • 2020

传值/传地址/传引用 区别

传值,      是把实参的值赋值给行参      那么对行参的修改,不会影响实参的值          传地址      是传值的一种特殊方式,只是他传递的是地址,不是普通的如int  ...
  • xfskblkdx
  • xfskblkdx
  • 2013年01月16日 17:30
  • 105

传值,传指针和传引用区别和联系

C++写了很多年,有一天,写着写着代码。竟然自己发现对传值,传指针,传引用这个每天都在用的传递方式的区别还不是很清楚。以为自己懂了,其实还理解得还不够深入,基础还需要花时间琢磨。今天参考了很多篇博客和...
  • zx3517288
  • zx3517288
  • 2016年11月27日 12:15
  • 708

C++中参数传递的两种方式:传值与传址及它们的区别

#include using namespace std; void mySwap(int *p1,int *p2); int main(){ int a=12; int b=44; int...
  • u011361880
  • u011361880
  • 2017年08月09日 19:53
  • 219

传值调用与传地址调用(传引用)

C/C++中参数传递有两种方式,传值或传地址(传引用),通常我们要在被调用函数中改变一个变量的值就需要传地址调用方式,例如: void swap_by_value(int a, int b) { i...
  • king624498030
  • king624498030
  • 2017年02月03日 11:08
  • 442

Java中传值和传引用的区别

声明:此文是作为本人自己学习的心得与总结,同时也是与同学们进行交流,如果有错误的地方,希望同学们进行指正        在这里,要想搞清楚二者的区别,那么首先明白两个概念,“传值”、“传引用”。   ...
  • sunguoqingufo
  • sunguoqingufo
  • 2016年02月21日 14:26
  • 4073

5个php实例,细致说明传值与传引用的区别

传值:是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值传引用 :真正的以地址的方式传递参数传递以后,行参和实参都是同一个对象,只是他们名字不同而已对行参的修改将影响实参的值 说明: ...
  • qq_36031499
  • qq_36031499
  • 2017年01月10日 21:23
  • 2599

C++中传值、传址与传引用的区别

1、参数传递的概念  所谓参数传递就是用函数调用所给出的实参(实际参数)向函数定义所给出的形参(形式参数)设置初始值的过程。 在c++中,调用函数时有三种参数传递方式,分别为: (1)传值调用;...
  • Silence723
  • Silence723
  • 2016年07月19日 10:07
  • 1281

两个页面之间通过url地址栏进行传值

第一个页面中有两个图片,当点击的时候能在第二个页面中获得它的属性值,通过location.assign在第一个页面进行传值,location.href在第二个页面进行接受值,一开始不会传值问题,但对于...
  • TTO_OTT
  • TTO_OTT
  • 2015年05月22日 14:47
  • 4929
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:传值与传地址的区别
举报原因:
原因补充:

(最多只允许输入30个字)