asp中byref和byval的区别,下面这段代码中的b怎么算,解释清楚点谢谢!!!!

<%dim a,b
function abc(byval a,byref c)
a=a+1
b=b+1
c=c+a+b
abc=a*2
end function
a=5:b=10
response.write abc(a,b)
response.write ":" & a & ":" & b
%>

在 Visual Basic 中,可以通过分别指定关键字 ByVal 或 ByRef,“通过值”或“通过引用”将参数传递给过程。通过值传递参数意味着过程不能在呼叫代码中修改参数的基础变量元素的内容。通过引用传递允许过程以呼叫代码本身可以使用的相同方法来修改变量元素的内容。

通过值和通过引用传递参数之间的差别与将数据类型分为值类型和引用类型不同。但是,两种类别确实相互影响。

如果使用 ByVal 关键字通过值传递变量参数,过程不能修改变量本身。但是,如果参数为引用类型,则可以修改它指向的对象成员,即使不能替换对象本身。具体说来就是可以修改对象的成员。例如,如果参数为数组变量,则不能向它分配新的数组,但可以更改它的一个或多个元素。更改的元素在呼叫代码中的基础数组变量中反映出来。

下面的示例说明通过值获得数组变量并对其元素进行操作的两个子例程。Increase 只是给每个元素加上 1。Replace 将新的数组分配给参数数组 A(),然后给每个元素加上 1。但是,重新分配并不会影响呼叫代码中的基础数组变量。

如果使用关键字 ByRef 通过引用传递变量参数,则过程能够修改变量本身。具体说来,如果参数为对象变量,则可以给它分配新的对象。这种重新分配也会影响到调用程序中的对象变量。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-13
byRef参数是传地址,当函数内部改这个参数的值的时候会反映到调用函数的外部变量,即把函数体外变量b的地址传给abc函数,所以,函数中的b和c都指向同一地址,数值是相同的,而且,函数内b和c的改变都会影响函数外b的值。 也就是说,函数内b和c与函数外b的值总是相同的。
而byVal参数是传值,函数内部不管怎么变动参数的值都不会影响到传值过来的外部变量。function abc中
a=5+1=6
b=10+1=11
c=11(上面一行已经将b赋值为11)+6+11=28

所以,函数外的b也等于28本回答被网友采纳
相似回答