为什么这个C程序的输出是这样的?

时间:2015-04-18 23:27:46

标签: c

为什么以下程序的输出是

x = 10 y = 18

int y;
void fun(int x) {
 x+=2;
 y=x+2;
}

int main() {
 int x;
 x=10; y=11;
 fun(x);
 fun(y);
 printf("x=%d y=%d\n", x,y);
 return 0;
}

输出不应该是10和11吗?

2 个答案:

答案 0 :(得分:2)

由于y全局变量,因此第一次调用fun(x); y变为14,因为x为{{} 1}},10生成x += 2,然后x == 12生成y = x + 2。然后,您使用14来调用它,这会使y == 14中的本地xfun()x == 16成为y == y + 2

答案 1 :(得分:2)

这些是每个函数调用之前和之后的变量状态。

PRE: x=10, y=11
 fun(x);
POST: x=10, y=14
PRE: x=10, y=14
 fun(y);
POST: x=10, y=18

如果你只是将fun()中的局部变量重命名为x以外的其他东西,那么它就变得不那么复杂了。

void fun(int x) {
  x+=2;
  y=x+2;
}

可以改写为:

void fun(int local_var) {
  y=local_var+4; //y is global, local_var is thrown away at the end of this scope.
}