📜  门| GATE-CS-2001 |第 44 题

📅  最后修改于: 2021-09-24 05:15:48             🧑  作者: Mango

考虑以下程序

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 提供。
这个问题的测验