📜  门| GATE-CS-2003 |第 90 题

📅  最后修改于: 2021-09-25 05:16:41             🧑  作者: Mango

Consider the C program shown below.
#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);
}
The output of this program is

(一) 12 7 6
(乙) 22 12 11
(C) 14 6 6
(四) 7 6 6答案:(一)
说明: x 是全局的,所以第一个 x 在 main() 中的第一行变为 5。然后 main() 用地址 x 调用 P()。

// in main(void)

x = 5 // Change global x to 5
P(&x)

P() 有一个名为 ‘x’ 的局部变量,它隐藏了全局变量。 P() theb 通过传递本地 ‘x’ 的值来调用 Q()。

// In P(int *y)

int x = *y + 2; // Local x = 7
Q(x);

在 Q(int z) 中,z 使用 x 是全局的

// In Q(int z)

z += x; // z becomes 5 + 7 
printz(); // prints 12

在 Q() 结束后,控制权返回到 P()。在 P() 中,*y(y 是全局 x 的地址)更改为 x – 1(x 是 P() 的本地地址)。

// Back in P()

 *y = x - 1; // *y = 7-1
 print(x); // Prints 7

Q() 结束后,控制权返回到 main()。在 main() 中,会打印全局 x。

// Back in main()

print(x); // prints 6 (updated in P()
          //           by *y = x - 1 )

这个问题的测验