0

您能否确认我对以下代码的回答:

procedure main
var x,y,z;

    procedure sub1
       begin
        var x,z 
        x := 6;
        z := 7;
        sub2();
        x := y*z + x;
        print(x);       
      end
    procedure sub2
      begin
        var x,y
        x := 1;
        y := x+z+2;
        print(y);       
      end
begin
    x := 1; y:=3; z:=5;
    sub1();
    sub2();
end 

我有:

  • 静止的:

    8
    27
    
  • 动态的:

    10
    27
    

那是对的吗?

4

2 回答 2

0

如果Pascal 支持动态范围,那么您的分析将是正确的,就目前而言。in 中声明的z变量sub1影响mainin 中声明的变量,甚至是在insub2。但是x声明的 insub2不会影响声明的 in 的值xsub1所以调用后sub1读取时仍然使用原始值 6。xsub2

但是,您的分析不完整。每次应该打印三个值,而不仅仅是两个。在这两种情况下,打印的第三个值都应该是 8。

于 2011-04-05T17:33:23.890 回答
-1

我不知道静态与动态是什么意思。Pascal 总是使用最内层范围内的变量。如果你使用它,那么结果是 8,27。我不知道您是如何得出另一个结果的(全球所有?)

于 2011-04-05T10:19:38.363 回答