传址与传值的问题
做了个例子
Module module1
Sub aa(ByRef p() As Integer, ByVal q() As Integer, ByRef s() As Integer, ByVal t() As Integer)
Dim i As Integer
Console.WriteLine("传递进过程的数组值")
Console.Write("P:")
For i = 0 To UBound(p)
Console.Write(CStr(p(i)) + " ")
Next
Console.WriteLine()
Console.Write("Q:")
For i = 0 To UBound(q)
Console.Write(CStr(q(i)) + " ")
Next
Console.WriteLine()
Console.Write("S:")
For i = 0 To UBound(s)
Console.Write(CStr(s(i)) + " ")
Next
Console.WriteLine()
Console.Write("T:")
For i = 0 To UBound(t)
Console.Write(CStr(t(i)) + " ")
Next
Console.WriteLine()
For i = 0 To UBound(p)
p(i) = p(i) + i ^ 3
Next
For i = 0 To UBound(q)
q(i) = q(i) + i ^ 3
Next
For i = 0 To UBound(s)
s(i) = s(i) + i ^ 3
Next
For i = 0 To UBound(t)
t(i) = t(i) + i ^ 3
Next
Console.WriteLine("运行后数组值")
Console.Write("P:")
For i = 0 To UBound(p)
Console.Write(CStr(p(i)) + " ")
Next
Console.WriteLine()
Console.Write("Q:")
For i = 0 To UBound(q)
Console.Write(CStr(q(i)) + " ")
Next
Console.WriteLine()
Console.Write("S:")
For i = 0 To UBound(s)
Console.Write(CStr(s(i)) + " ")
Next
Console.WriteLine()
Console.Write("T:")
For i = 0 To UBound(t)
Console.Write(CStr(t(i)) + " ")
Next
Console.WriteLine()
End Sub
Sub main()
Dim x() As Integer = {10, 10, 10}
Dim y() As Integer = {10, 10, 10}
Dim m() As Integer = {10, 10, 10}
Dim n() As Integer = {10, 10, 10}
Dim i As Integer
Console.WriteLine("原始数组值")
Console.Write("X:")
For i = 0 To UBound(x)
Console.Write(CStr(x(i)) + " ")
Next
Console.WriteLine()
Console.Write("Y:")
For i = 0 To UBound(y)
Console.Write(CStr(y(i)) + " ")
Next
Console.WriteLine()
Console.Write("M:")
For i = 0 To UBound(m)
Console.Write(CStr(m(i)) + " ")
Next
Console.WriteLine()
Console.Write("N:")
For i = 0 To UBound(n)
Console.Write(CStr(n(i)) + " ")
Next
Console.WriteLine()
Call aa(x, y, m, n)
Console.WriteLine("运行后的数组值")
Console.Write("X:")
For i = 0 To UBound(x)
Console.Write(CStr(x(i)) + " ")
Next
Console.WriteLine()
Console.Write("Y:")
For i = 0 To UBound(y)
Console.Write(CStr(y(i)) + " ")
Next
Console.WriteLine()
Console.Write("M:")
For i = 0 To UBound(m)
Console.Write(CStr(m(i)) + " ")
Next
Console.WriteLine()
Console.Write("N:")
For i = 0 To UBound(n)
Console.Write(CStr(n(i)) + " ")
Next
Console.WriteLine()
Console.ReadLine()
End Sub
End Module
得到的答案是
原始数组值
X:10 10 10
Y:10 10 10
M:10 10 10
N:10 10 10
传递进过程的数组值
P:10 10 10
Q:10 10 10
S:10 10 10
T:10 10 10
运行后数组值
P:10 11 18
Q:10 11 18
S:10 11 18
T:10 11 18
运行后的数组值
X:10 11 18
Y:10 11 18 //本人疑问:此处是传值的,应该还原成Y:10 10 10,为什么数值却被保留下来了
M:10 11 18
N:10 11 18 //本人疑问:此处是传值的,应该还原成N:10 10 10,为什么数值却被保留下来了
请各位帮小弟被惑啊