为什么以下程序的输出是
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吗?
答案 0 :(得分:2)
由于y
是全局变量,因此第一次调用fun(x);
y
变为14
,因为x
为{{} 1}},10
生成x += 2
,然后x == 12
生成y = x + 2
。然后,您使用14
来调用它,这会使y == 14
中的本地x
,fun()
和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.
}