大门|大门-CS-2002 |问题17

在C语言中 (A) 当前激活记录和主服务器的激活记录之间最多存在一条激活记录 (B) 当前激活记录和main的激活记录之间的激活记录数取决于实际的函数调用顺序。 (C) 全局变量的可见性取决于实际的函数调用顺序。 (D) 递归要求在调用递归函数之前,将递归函数的激活记录保存在不同的堆栈上。 答复: (B) 说明:

null

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

  • 被呼叫人的本地人
  • 回电地址
  • 被调用方的参数

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

选项a 该语句为false,因为可以从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 –考虑到上述递归函数,每次进行递归调用时,函数都存储在相同的位置

递归(4)
递归(5)
递归(6)
Main()

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

这个解决方案是由 P 阿鲁尔 莎玛。

这个问题的小测验

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享