📜  门| GATE-CS-2002 |问题 17

📅  最后修改于: 2021-09-26 03:48:21             🧑  作者: Mango

在 C 语言中
(A)当前活动记录和主活动记录之间最多存在一个活动记录
(B)当前活动记录和主活动记录之间的活动记录数量取决于实际的函数调用顺序。
(C)全局变量的可见性取决于实际的函数调用顺序。
(D)递归要求递归函数的活动记录保存在不同的堆栈上,然后才能调用递归函数。答案:(乙)
解释:

用于函数的调用堆栈的一部分被调用的函数的堆栈帧或激活记录。
激活记录是堆栈帧的另一个名称。它是组成调用堆栈的数据结构。它一般由以下组成:

  • 被叫方的本地人
  • 将地址返回给调用者
  • 被调用者参数

因此,调用堆栈由任意数量的激活记录组成,这些激活记录在添加新子例程时添加到堆栈中,并在它们返回时(通常)从堆栈中删除。
在 C 语言中,程序执行从 main函数开始,因此它是函数堆栈中的第一个活动记录。现在查看每个选项-

选项 a 该语句是错误的,因为可以从 main 调用任意数量的函数。可能不需要最多存在一个活动记录和 main 的活动记录。
例如 – 在递归的情况下。

Recurse (int n)
{
    if(n==0)
         return ;
       else 
         recurse(n-1);
}

在上面的示例中,如果我们最初将 n=6 传递给函数,则 main 和 recurse(4) 的活动记录将具有 recurse(5)、recurse(6)(多于一个)的函数。

选项 b – 一旦函数被调用,它的激活记录就会在函数堆栈中创建,即为真。

选项 c – 在 C 语言中,变量是静态作用域而非动态作用域,全局变量在执行开始时被静态分配地址空间,而不取决于何时何地使用它们。

选项 d – 考虑到上述递归函数,每次进行递归调用时,函数都存储在相同的位置

Recurse(4)
Recurse(5)
Recurse(6)
Main()

参考 http://geeksquiz.com/c-misc-question-1/

该解决方案由Parul sharma 提供。

这个问题的测验