考虑下面的程序
null
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 |
如果语言具有动态范围,并且参数通过引用传递,程序将打印什么? (A) 10 (B) 11 (C) 3. (D) 以上都不是 答复: (D) 说明:
在静态作用域或编译时作用域中,自由变量(函数中使用的变量既不是局部变量,也不是该函数的参数)被称为全局变量,因为在编译时只有全局变量可用。 在动态作用域或运行时作用域中,自由变量被称为函数调用堆栈的最新框架中的变量。在程序W的函数调用的给定代码中,局部变量x被打印出来,即4。在动态范围下,如果程序W中没有x,那么我们将在函数调用堆栈中引用函数的x,即程序D和主函数,但由于x是局部变量而不是自由变量,我们引用局部变量,因此将打印4。
见本报告问题4 https://www.geeksforgeeks.org/principle-of-programming-languages-set-1/
这个解决方案是由 帕鲁尔·夏尔马。 这个问题的小测验
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END