在C语言中 (A) 当前激活记录和主服务器的激活记录之间最多存在一条激活记录 (B) 当前激活记录和main的激活记录之间的激活记录数取决于实际的函数调用顺序。 (C) 全局变量的可见性取决于实际的函数调用顺序。 (D) 递归要求在调用递归函数之前,将递归函数的激活记录保存在不同的堆栈上。 答复: (B) 说明:
用于调用函数的堆栈部分称为函数的堆栈帧或激活记录。 激活记录是堆栈帧的另一个名称。它是构成调用堆栈的数据结构。它通常由以下部分组成:
- 被呼叫人的本地人
- 回电地址
- 被调用方的参数
因此,调用堆栈由任意数量的激活记录组成,这些记录在添加新的子例程时被添加到堆栈中,并在它们返回时从堆栈中移除(通常)。 在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 阿鲁尔 莎玛。