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 )
这个问题的测验