<%@ 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>