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

📅  最后修改于: 2021-06-28 22:32:40             🧑  作者: Mango

用C语言
(A)当前的激活记录与主设备的激活记录之间最多存在一个激活记录
(B)当前激活记录与主体激活记录之间的激活记录数取决于实际的函数调用顺序。
(C)全局变量的可见性取决于实际的函数调用顺序。
(d)递归需要用于递归函数被保存在不同的堆栈中的递归函数可以被称为前的活动记录。答案: (B)
解释:

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

  • 被呼叫者的本地人
  • 返回地址给来电者
  • 被叫方参数

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

选项a 该语句为假,因为可以从主函数调用任何数量的函数。可能没有必要至少存在一个激活记录和main的激活记录。
例如-在递归的情况下。

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

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

选项b –调用某个函数后即为True,它将在函数堆栈中创建其激活记录。

选项c –在C语言中,变量的静态范围不是动态的,全局变量是在执行开始时静态分配的地址空间,而不取决于它们的使用时间和位置。

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

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

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

此解决方案由P arul sharma提供。

这个问题的测验