📜  门| GATE IT 2006 |第50章

📅  最后修改于: 2021-06-29 05:09:50             🧑  作者: Mango

执行以下程序时,将打印以下给出的哪个选择?

#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中交换它们的地址-一旦交换函数返回,实际上就什么也没有。

printab函数将9加到静态变量a和b中。数字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提供
这个问题的测验