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

📅  最后修改于: 2021-06-29 22:09:14             🧑  作者: 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

(A) 12 7 6
(B) 22 12 11
(C) 14 6 6
(D) 7 6 6答案: (A)
说明: 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 )

这个问题的测验