考虑以下程序
Program P2
var n: int:
procedure W(var x: int)
begin
x=x+1;
print x;
end
procedure D
begin
var n: int;
n=3;
W(n);
end
begin //beginP2
n=10;
D;
end
如果语言有动态作用域并且参数是通过引用传递的,程序会打印什么?
(一) 10
(乙) 11
(三) 3
(D)以上都不是答案: (D)
解释:
在静态作用域或编译时作用域中,自由变量(函数中使用的变量既不是局部变量也不是该函数的参数)被称为全局变量,因为在编译时只有全局变量可用。
在动态范围或运行时范围内,自由变量被称为函数调用堆栈的最新帧中的变量。在程序的函数调用W上的局部变量x被印刷即4.在动态作用域如果x会一直没有在步骤W,则我们将参照函数的X中的函数调用栈即步骤d和给定的代码main函数,但由于 x 是局部变量而不是自由变量,因此我们引用了局部变量,因此将打印 4。
参见 https://www.geeksforgeeks.org/principle-of-programming-languages-set-1/ 的问题 4
该解决方案由Parul Sharma 提供。
这个问题的测验