Visual foxpro高手请一定进来看看!!200分!!

来源:百度知道 编辑:UC知道 时间:2024/06/24 05:22:29
&&主程序
X1=1
X2=2
DO P1 WITH X1,X2
?"X1="+STR(X1,1)
??"X2="+STR(X2,1)
X1=1
X2=2
DO P1 WITH X1,X1+X2
?"X1="+STR(X1,1)
??"X2="+STR(X2,1)
RETURN

&&过程
PROCEDURE p1
PRIVATE W1
W1=W1*3
W2=W2*4
RETURN
第一次显示x1、x2的值为__,第二次显示x1、x2的值为__.
答案:x1=3,x2=8;x1=3,x2=2
首先,不信任答案的朋友可自己用VFOR运行一下。。
我的问题是,为什么子程序里面明明有个“PRIVATE W1”但是x1的值却不会被返回,另外若去掉PRIVATE W1,结果却一样,为什么会出现这种情况,我马上就要参加等级考试了,望高人指点迷津!
3楼的修改是对的,那是我上传的时候少写了~问题的关键不在那里哈.我想问的是,后面的“PRIVATE W1”为什么没有把W1的值返回为1?

1. 在过程调用或自定义函数调用时,要有步骤给参数赋初值,且接收参数命令必须出现在子程序的第一行。

可以用参数传递“para W1,W2”或者是赋值方式“W1=X1,W2=X2”给参数赋初值。

但在此推荐你使用参数传递方式,因为你这个程序中,有两次调用过程文件,所以赋值方式会增加负担,要写两个过程文件,proc p1“W1=X1,W2=X2”和proc p2 “W1=X1,W2=X1+X2”,这样麻烦。

2。private是私有,将参数私有化,它使参数只能够在本过程或下级程序中可用。——在这题中,你是上级调用PRIVATE本级,是无法返回的。
我也快要考二级了,在整理笔记中,刚好有这题。加油哦!

我不是高人

正确的程序应改为
&&主程序
X1=1
X2=2
DO P1 WITH X1,X2
?"X1="+STR(X1,1)
??"X2="+STR(X2,1)
X1=1
X2=2
DO P1 WITH X1,X1+X2
?"X1="+STR(X1,1)
??"X2="+STR(X2,1)
RETURN

&&过程
PROCEDURE p1
parameter w1,w2
private w1
W1=W1*3
W2=W2*4
RETURN
你在调用p1是用了with
在p1中要有这一句 parameter w1,w2 接收数据
默认情况下,DO 命令中的 WITH 子句按引用传递内存变量到过程中。
所以第一次调用x1,x2都是引用传递
第二次调用x1是引用传递 x1+x2是按值传递
(值传递是将要传递的值作为一副本传递的..
引用传递,传递的是引用对象的内存地址.. )

private
在当前程序中隐藏指定的调用程序中定义的内存变量或