首先是全局变量
int x=77;
接着是空函数void fn1()里的x,这里先把它看成x1
再,主函数里,int x=10;定义局部变量x,此局部变量x只在主函数里有效,先把它看成x2,
进入if函数,if函数内,再次,定义局部变量int x=100;这个x只在if内有效,if函数外是一个输出语句,要求输出main方法的x,也就是刚看成x2那个,此时输出结果应该是x=10了,再,接着fn1()函数,进入fn1()函数,输出x就是x1了,也就是全局变量,因为fn函数没有定义x,所以fn函数使用全局变量int x=77。这里说下if中(x>0)这个x,是主函数的局部变量int x=10
然后,如果if中x没有定义,即“x=100;x/=2;”这里系统理解为x赋值为100,运算后得到x值=50,而这个x就是定义的局部变量int x=10;的值,也就解释了为啥下一句输出语句会输出x=50了
所以if函数中要定义x,不然x只是被赋值,从而影响下面的输出语句
自问自答