以下问题已在 GATE CS 考试中提出。
1. 在 C 语言中 (GATE CS 2002)
a) 当前活动记录和主活动记录之间最多存在一个活动记录
b) 当前活动记录和主活动记录之间的活动记录数取决于实际的函数调用顺序。
c) 全局变量的可见性取决于实际的函数调用顺序。
d) 递归需要在递归函数被调用之前将递归函数的活动记录保存在不同的堆栈中。
答案(二)
a) –> C 语言没有这样的限制
b) –> 真
c) –> 错误。在 C 中,变量是静态作用域的,而不是动态作用域。
c) –> 错误。活动记录存储在同一个堆栈中。
2. 考虑如下所示的 C 程序。
# include
# define print(x) printf ("%d", x)
int x;
void Q(int z)
{
z += x;
print(z);
}
void P(int *y)
{
int x = *y+2;
Q(x);
*y = x-1;
print(x);
}
main(void)
{
x=5;
P(&x);
print(x);
getchar();
}
这个程序的输出是 (GATE CS 2003)
一)1276
b) 22 12 11
c) 14 6 6
d) 766
答案(一)
请注意,main() 和 Q() 正在访问全局变量 x。在 P() 内部,指针变量 y 也保存了全局变量 x 的地址,但 P() 中的 x 是它的 P 自己的局部变量。
请参阅 GATE Corner 了解所有往年论文/解决方案/解释、教学大纲、重要日期、笔记等。