首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

按值传递(Byval)跟按地址传递(ByRef)-参数传递

2012-08-31 
按值传递(Byval)和按地址传递(ByRef)---参数传递在接触了这么多的编程语言后,乎每个语言都要涉及到参数的

按值传递(Byval)和按地址传递(ByRef)---参数传递

在接触了这么多的编程语言后,似乎每个语言都要涉及到参数的传递,而参数传递过程中的两种传递方式:


①按值传递  


②按地址传递


学到现在了,仔细想想还是很模糊,从开始接触C++中的参数传递,只知道有这么个东西,但你要是让我说明白,有点够呛,在编程序的时候呢都是记住了一些写法才不会出错,紧接着学习C语言,Java都是如此,最近由于学习的需要,我要进行VB的一些学习,对于这个似乎忽然理解了 下面就是我自己的一些理解,在此分享一下

 

 按值传递:在过程被调用时,传递给形参的是调用过程中的相应实参的值,形参与实参各占有不同位置的储存空间,被调用过程在执行过程中,改变了形参变量的值,但不会调用过程的实参值。


按地址传递:就是当调用一个过程时,是把实参变量的内存地址传递给被调用过程的形参,也就是说形参与实参使用相同地址的内存单元。因此当在被调用过程中改变形参的值,就等于改变了实参的值。


PS:其实我个人认为就像两个小孩,都有自己的家,按值传递的就像是一个小孩去另一个小孩家玩,玩一段时间还是要回自己各自的家,而他们俩的家却没啥联系,一点没变,还在那呢  而按地址传递呢,就像是假如其中一个小孩的家发大水啦,然后这个小孩无家可归了,于是被另外一个小孩家收留了,这个小孩带着自己东西去那个小孩家,这时两个小孩拥有的是相同的一个家,他们俩就有联系了,因为那个小孩的家换成另外一个了.(不知道举得例子是否恰当)

指针相信学习编程的人都知道吧,那么看看下面的例子

  按值传递时,实质上实参a只是把一个副本传递给形参x,也可以直接理解为传递的结果是让x*2中的x的值等于10(即a的值),乘以2后再赋值(赋值不用解释吧)给x,即实际上w方法的运算并没有对a本身进行操作。所以调用w方法前后a值始终等于10,而w方法得到的结果是20。

按值传递(Byval)跟按地址传递(ByRef)-参数传递

按址传递时,实质上实参a是把指针(地址)传递给形参x,这个指针指向的地址的值即是10,此时a与x分别有一个指针同时指向10所在地址,即实际上w方法对a本身直接进行了操作(a自身参与运算)。所以调用w方法前后a值分别等于10和20,而w方法得到的结果是依然是20。

按值传递(Byval)跟按地址传递(ByRef)-参数传递

 

在比如拿VB中的例子来说

 

按地址传递



按值传递



通过例子的观察和理解相信不懂参数传递的你也会和我一样理解了吧

3楼lishehe1小时前
很好理解啊,加油,呵呵
Re: yudandan101小时前
回复lishehen嘿嘿,我理解的晚了一点
2楼lfmilaoshi1小时前
深入浅出,,,很好。。米老师
Re: yudandan101小时前
回复lfmilaoshin理解的晚了一点
1楼kuangxiang_panpan2小时前
写得很好
Re: yudandan102小时前
回复kuangxiang_panpann谢谢

热点排行