执行以下程序时,将打印以下给出的选项中的哪一项?
#include
void swap (int *x, int *y)
{
static int *temp;
temp = x;
x = y;
y = temp;
}
void printab ()
{
static int i, a = -3, b = -6;
i = 0;
while (i <= 4)
{
if ((i++)%2 == 1) continue;
a = a + i;
b = b + i;
}
swap (&a, &b);
printf("a = %d, b = %d\n", a, b);
}
main()
{
printab();
printab();
}
(A) a = 0, b = 3
a = 0, b = 3
(B) a = 3, b = 0
a = 12, b = 9
(C) a = 3, b = 6
a = 3, b = 6
(D) a = 6, b = 3
a = 15, b = 12答案: (D)
解释:
需要思考的事情:
• swap函数实际上并不交换两个变量,而只是交换它们在局部变量x 和y 中的地址——一旦swap函数返回,实际上什么都没有。
• printab函数将静态变量a 和b 加9。数字 9 来自这样一个事实,即 while 循环仅在 i = 1, 3, 5 时才执行这些算术语句。
因此,当第一次调用 printab 时,这些是局部变量值:a = -3 + 9 和 b = -6 + 9。第二次,a = -3 + 9 + 9 和 b = -6 + 9 + 9 是所需的值。
因此,正确答案是 (D) a = 6, b = 3; a = 15,b = 12。
该解决方案由vineet purswani 提供。
这个问题的测验