求VB高手帮我做下这道题,最好代码也解释下为什么这么写,谢谢了救急啊

dim i as integer,j as integer,k as integer,h as integer 1
private sub form_click()
dim i as integer 2
i=0:j=1:k=2
call q(1,i):print i;j;k
call q(2,j):print i;j;k
call q(3,k):print i;j;k
end sub
private sub q(i)
i=i+1: print i;j;k
end sub
private sub q(byval h,j)
i=j
if h=0 then
call p(j)
else
if h =1 then call p(i) else j=j+1
end if
end sub
问题:单击窗体。窗体上显示的结果为? 答案我知道,不知道为什么是这个答案,请附上解释
问题2:当去掉标示1的语句时,单击窗体,窗体上显示的结果为?
问题3:当仅去掉标示2的语句时,单击窗体,窗体上显示的结果为?

求大神帮助啊,很急的

  问题敲在很辛苦,但出来两个Q方法, 还好能看懂

  没做这个题。但给你解释下,

我想你问这个题的原因是没有分清楚全局变量和局部变量。
语句1里面定义了i,j,等。这些i,j是全局变量。
方法P里面定义i,这个i是局部变量。
你在方法Q里面没有定义过i但使用了i,这时调的就是全局变量,就是提示1语句里的i

可以这样区分,如果有一个全局变量,和一个局部变量都申明为 i ,
在所有用到这个i的方法里,如果当前方法申明了这个i(传参也算是一种申明,即定义),就表明是调用自己申明的i,而不是全局变量,如果没有申明过,就表示使用调用的是全局变量。追问

第二个private sub p(i),是我敲错了。单击窗体显示结果是1 1 2
0 1 2
0 2 2
0 2 3我怎么做都得不到这个答案,能解释下麽?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-14
这个题目考的是你对过程变量,局部变量,传值类型和传地址类型的理解! (全局变量一边是模块级别的Public定义)
i变量被定义了两次,但是作用域不一样,一个是Click事件过程中被定义,属于过程变量,只在此过程中生效;另外一个是局部变量,一旦窗口被实例化,就在内存中存在了!
运行过程的逻辑就不说了,猜想你应该OK的!只讲一下值的变化过程:
q方法 第一个参数是传值的,参数值在中间如何变化,不会影响原先传入的变量值; 第二个参数 是传地址的,参数和被传的那个变量是公用同一块内存,互相影响;
call q(1,i) i=0作为参数传入,i和j使用同一个内存区域, j=0,注意一下q过程中i=j这条语句 j把值用赋值的方式给了局部变量i;在if...else语句中进入call p(i)方法,传地址的方式把局部变量i 给了参数i
i=i+1; 把局部变量i=1;print i;j;k 打印出来就是 1 1 2 再一次打印print i;j;k 0 1 2(两个i是不同的i值)

接下来就自己慢慢推理吧
不懂再追问....
第2个回答  2013-01-12
代码错误,二次定义Q变量。。追问

敲错了不好意思,第二句private sub p(i)
i=i 1:print i;j;k

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网