回 帖 发 新 帖 刷新版面

主题:vb传值的内容看不懂.

这例子的运行过程不知道怎么一步一步的运行.有人能帮我在代码画流程图不.
Private Sub Command1_Click()
    dim a as integer ,y as integer
    x = 5
    y = 10
    Print "x=" & x
    Print "y=" & y
    Call change1(x, y)
    Print
    Print "按值传递结果"
    Print "x=" & x
    Print "y=" & y
    Call change2(x, y)
    Print
    Print "按地址传递结果"
    Print "x=" & x
    Print "y=" & y
End Sub


Private Sub change1(ByVal a As Integer, ByVal b As Integer)
    Dim g As Integer
    g = b
    b = a
    a = g
End Sub

Private Sub change2(a As Integer, b As Integer)
    Dim g As Integer
    g = b
    b = a
    a = g
End Sub

回复列表 (共8个回复)

沙发

在过程中加入 debug或者print
   传值是不改变原来变量内容的。

板凳

在每段过程的开头加上断点
运行后,就后停在那里。
然后按F8可以单步运行,各变量值以及运行顺序,自然就清楚了

3 楼

它们是谁传给谁.因为没有流程详解.不明白啊.书上给的例子又少,不知道上那请教.太难读懂.有耐心的请帮下吧.

4 楼

sub里面是双向传递

5 楼

老大徒伤悲,你写多几个简短的例子出来吧,并说明原理和思路.

6 楼

所谓的传值和传址,是针对子函数调用时的参数来说的,子函数调用的传值还是传址,是由其参数声明确定的。

Private Sub change2(a As Integer, b As Integer)

默认的声明,a和b是传址(变量地址),相当于C/C++中的引用类型和指针类型,参数的值可以在子函数中被改变且返回被改变的值。

Private Sub change1(ByVal a As Integer, ByVal b As Integer)

加上ByVal就是传值,参数a、b只是数值的复制品传给子函数,a、b可以在子函数内改变(只是其复制品),但是返回时a、b是不会有任何改变的。

7 楼

华山论剑,你只是把书上的内容重说一次,我根本不知道是怎么进行的,对于会的人来说,可能是简单的事,对新手来说是一头雾水.

8 楼

说说就说说。
为了好说,对语句编号。
1  Private Sub Command1_Click()
2    dim a as integer ,y as integer            '在这里你没有声明变量x,下面会出错!
3    x = 5
4    y = 10
5    Print "x=" & x
6    Print "y=" & y
7    Call change1(x, y)
8    Print
9    Print "按值传递结果"
10    Print "x=" & x
11    Print "y=" & y
12    Call change2(x, y)
13    Print
14    Print "按地址传递结果"
15    Print "x=" & x
16    Print "y=" & y
17  End Sub


18  Private Sub change1(ByVal a As Integer, ByVal b As Integer)
19    Dim g As Integer
20    g = b
21    b = a
22    a = g
23  End Sub

24  Private Sub change2(a As Integer, b As Integer)
25    Dim g As Integer
26    g = b
27    b = a
28    a = g
29  End Sub

次序 已执行语句编号                      变量的值
                     按钮过程           change1过程       Change2过程
                    a   x   y           a    b  g       a   b    g
1    1              -   -   -           -    -   -       -   -    -
2    2              0   -   0           -    -   -       -   -    -
3    3              0   5   0           -    -   -       -   -    -
4    4~6            0   5   10          -    -   -       -   -    -
5    18             0   5   10          5    10  -       -   -    -
6    19             0   5   10          5    10  0       -   -    -
7    20             0   5   10          5    10  10      -   -    -
8    21             0   5   10          5    5   10      -   -    -
9    22             0   5   10          10    5   10     -   -    -
10    23(7)~11      0   5   10          -    -   -       -   -    -
11    24            0   5   10          -    -   -       5   10    -
12    25            0   5   10          -    -   -       5   10    0
13    26            0   5   10          -    -   -       5   10    10
14    27            0   5   5           -    -   -       5   5    10
15    28            0   10  5           -    -   -       10  5    10
16    29(12)~17     0   10  5           -    -   -       -   -    -

如果这样你在看不懂,我就不知道怎么说了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册