您能否确认我对以下代码的回答:
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
这是对的吗?
答案 0 :(得分:0)
如果 Pascal支持动态作用域,那么就你的分析而言,你的分析是正确的。在z
中声明的sub1
变量 shadow 在main
中声明的变量,即使在sub2
内也是如此。但x
中声明的sub2
不会影响x
中声明的sub1
的值,因此sub1
在读取x
时仍会使用原始值6调用sub2
之后{1}}。
但您的分析不完整。每次应该打印三个值,而不仅仅是两个。在这两种情况下,打印的第三个值应为8。
答案 1 :(得分:-1)
我不知道静态与动态意味着什么。 Pascal总是在最里面的范围内使用变量。如果你使用它,那么结果是8,27。我不知道你是怎么得到其他结果的(一切都是全球性的?)