问题敲在很辛苦,但出来两个Q方法, 还好能看懂
没做这个题。但给你解释下,
我想你问这个题的原因是没有分清楚全局变量和局部变量。
语句1里面定义了i,j,等。这些i,j是全局变量。
方法P里面定义i,这个i是局部变量。
你在方法Q里面没有定义过i但使用了i,这时调的就是全局变量,就是提示1语句里的i
可以这样区分,如果有一个全局变量,和一个局部变量都申明为 i ,
在所有用到这个i的方法里,如果当前方法申明了这个i(传参也算是一种申明,即定义),就表明是调用自己申明的i,而不是全局变量,如果没有申明过,就表示使用调用的是全局变量。
这个题目考的是你对过程变量,局部变量,传值类型和传地址类型的理解! (全局变量一边是模块级别的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值)
接下来就自己慢慢推理吧
不懂再追问....
代码错误,二次定义Q变量。。