内存变量的作用范围

今天在csdn论坛中,看到几个题目。分析并解答。  

原贴是:http://topic.csdn.net/u/20080116/20/4eed1feb-a5a5-4080-87b5-aaded56e723d.html

(3)指出下面程序的运行结果
主程序:MAIN.RPG                               过程文件:PROGC.PRG
              SET   TALK   OFF                                         PROCEDURE   PROC1
              CLEAR                                                       A=A*2+1
              SET   PROCEDURE   TO   PROGC                     RETURN
              PUBLICA,   B                                             PROCEDURE   PROC2
              A=5                                                           PRIVATE   B
              DO   PROC1                                                 B=A*2+1
              ?   A                                                           C=C*2+1
              STORE   2   TO   B,   C                                   DO   PROC3
              DO   PROC2                                                 PROCEDURE   PROC3
              SET   TALK   ON                                           C=C*C
              RETURN                                                     RETURN

现具体分析如下:
        首先,SET       PROCEDURE       TO的作用是打开过程文件PROGC,以便于直接调用其中的过程。
        第二,要理解PUBLIC和PRIVATE的用法。
                public     定义全局内存变量或数组。
                private   在当前程序中隐藏指定的、在调用程序中定义的内存变量或数组。  
                        将高层程序中创建的、与私有变量同名的变量隐藏起来,可以在当前程序中操作这些私有变量,
                        而不影响被隐藏变量的值。一旦包含   private   命令的程序执行完毕,所有声明为私有的内存
                        变量和数组就可恢复使用


        第三,程序执行过程是:
              ①PUBLIC   a,   b 定义两个全局变量
              ②a=5 给a赋值为5后,调用   proc1
             ③由于a是全局变量,从proc1计算后,返回a的值是11
             ④所以,?   a 时,显示出11
             ⑤STORE   2   TO   b,   c   给b和c都赋值为2   ,调用proc2
                    注意尽管没有指定变量c的范围,但由于是在主程序中定义的,则在其所有的子程序中都有效
             ⑥执行proc2,语句   PRIVATE   b 将变量b指定为私有变量。这样
                      执行b=a*2+1后,b的值是23;执行c=c*2+1后,c的值是5                            
           ⑦然后再调用proc3,变量c的值是25  
           ⑧从proc2返回到主程序后,
                    由于c是在主程序中定义的,在所有的程序中效(相当于全局变量),故其值仍然是25
                    然而由于b在proc2中被指定为私有变量,故b的值被恢复到其原来在主程序中的值,即2

将上述程序稍稍更改如下
*main.prg
SET   TALK   OFF
CLEAR
SET   PROCEDURE   TO   progc
PUBLIC   a,   b
a=5
DO   proc1
?   a
STORE   2   TO   b,   c
DO   proc2
?   "proc2     后     b=   ",b
?   "proc2     后     c=   ",c

SET   TALK   ON
RETURN


*progc过程
PROCEDURE   proc1
        a=a*2+1
        RETURN

PROCEDURE   proc2
        PRIVATE   b
        b=a*2+1
        c=c*2+1
        ?   "proc2中     b=",b
        ?   "proc2中     c=",c

        DO   proc3
        ?   "proc3后     c=",c

PROCEDURE   proc3
        c=c*c

**其中,红色的是我加的
运行结果是:

                11
proc2中     b=                   23
proc2中     c=                     5
proc3后     c=                   25
proc2     后     b=                       2
proc2     后     c=                     25

最后,仔细想想,我给大家分析的程序执行过程,不正是上面显示的结果吗?

发布了24 篇原创文章 · 获赞 5 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/cdbqss1/article/details/2047789