大门|大门-CS-2001 |问题44

考虑下面的程序

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
喜欢就支持一下吧
点赞12 分享