如果pascal使用的是动态范围,那么这个代码的结果会是什么? 通过使用静态范围,我得到了这些结果! x = 32,y = 39,z = 105
program what(output);
var
y, z: integer;
procedure p(x, z: integer);
procedure a(y: integer);
begin (* of procedure a *)
writeln(x, y, z);
x := x + 5;
end;
procedure b(x:integer);
begin (* of procedure b *)
writeln(x, y, z);
y := y + 2;
a(x + 7);
end;
begin (* of procedure p *)
b(32);
writeln(x, y, z);
a(47);
writeln(x, y, z);
end;
procedure q(x,y:integer);
begin (* of procedure q *)
p(x + 4, x + y);
writeln(x, y, z);
end;
begin (* of program what *)
y := 21;
z := 105;
q(y + 1, y + z);
writeln(y, z);
end.
答案 0 :(得分:0)
我认为主要区别在于函数a()会看到它的调用者(“b()”)x,而不是父程序(p)中的那个。