运行下面的程序,单击窗体时,窗体上第一行显示的内容是_______,第二行显示的内容是_______, 
          Private Sub P1(x As Integer,ByVal y As Integer) 
               Static z As Integer 
               x=x+z 
               y=x-z 
               z=10-y 
          End Sub           Private Sub Form_Click() 
               Dim a As Integer,b As Integer,z As Integer 
               a=1:b=3:z=2 
               Call P1(a,b) 
               Print a,b,z 
               Call P1(b,a) 
               Print a,b,z 
         End Sub 
     答案是"1 3 2","1 12 2",请问大师们程序在调用时是如何调用的?怎么得出答案的?

解决方案 »

  1.   

    x As Integer 会把改变后的x的值回传给a,使a=x,
    所以第一个Call P1(a,b)后a等于1。(z= 0 ,x-z=1)
    第二个Call P1(b,a),
    此时b=3不变,a = 1(已经变过了,只是前后值相等),
    Form_Click里的z= 2,但P1里的z=9。
    x=x+z=3+9 = 12(b的值也变成12了) b=12
    y=x-z =12-9 = 3 (因为ByVal 的存在不改变a的值)a =1
    z=10-y = 7(也不会改变Form_Click里的z的值)z=2
      

  2.   

    Static z As Integer 就是把z赋值为0,楼上的很详细了
      

  3.   

    能再问一下吗?为什么二楼说“Form_Click里的z= 2,但P1里的z=9。”
      

  4.   

    两个Z的生存空间不同,Form_Click里的z= 2容易理解,P1中的Z为
    Z=10-Y=10-(X-Z)=10-(X+Z-Z)=10-X=10-1=9