<%@ Page Language="vb" Debug="true" ContentType="text/html" ResponseEncoding="gb2312" %>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>参数传递之 按值传递和按地址传递的区别</title>
<style type="text/css">
<!--
.STYLE1 {color: #CCCCCC}
.STYLE2 {color: #999999}
-->
</style>
<head>
<script language="vb" runat="server">
sub total(byref day as integer,byval overtime as double) '注意看下后面的解释
dim money as double
money=day*800+overtime*800/3
response.Write("一共工作了:"& day &"天<br>加班:"& overtime &"小时<br>薪水一共:" & money & "元<br>")
day+=10
overtime+=10
end sub
sub page_load()
dim day,overtime as double
day=24 '这里加10是为了验证传递结果的
overtime=15 '这里加10是为了验证传递结果的
total(day,overtime)
response.Write("主程序中天数是:" & day & "<br>主程序中的加班时间是" & overtime & "小时<br>")
end sub
</script>
</head>
<body>
<p><hr>
<span class="STYLE2">这个例题看起来没有问题,如果是细心点的话一定不难发现,在第一个sub过程后面的括号内,我用了两种方式声明过程传递,一种是byref(按地址传送,这种方式传递是用变量的内存地址去访问实际变量的内容,其结果是将变量传递给过程,通过过程去改变变量的值,这种方式效率较高),另种是byval(按值传送,这种方式传递时,传递的只是变量的副本,如果过程改变了这个值,那也只是改变副本,而不会影响到变量本身。)</span>
<p><hr><span class="STYLE2">
上面例题所得出的结果是:<br>
一共工作了:24天<br>
加班:15小时<br>
薪水一共:23200元<br>
主程序中天数是:34 这个是按地址传送的,所以他的值被修改了。<br>
主程序中的加班时间是15小时 这个是按参数传递的,所以他的值未被修改。</span><br>
</body>
</html>