慕斯3506238
2023-11-01 14:35
#include <stdio.h>
int x = 77;
void fn1()
{
printf("fn1(): x=%d\n", x);
}
int main()
{
if(x>0)
{
x = 100;
x /= 2;
printf("if语句内, x=%d\n", x);
}
printf("main方法内, x=%d\n", x); int x = 10;
fn1();
return 0;
}
搞错问题了,重新回答一下。
还有你搞错了,输出50那个代码是if语句的输出,不是fn1()的输出。
你这把int x= 10; 放到了主函数调用无参函数fn1()前面,
无参函数fn1(),不论你在main函数中哪个位置定义int x = 10;
无参函数fn1()里面运行的x的值都是使用全局变量定义的 int x=77的值。所以fn1() = 77.
因为被覆盖住了,
代码运行,
第一第二行后得x=77
然后运行到主函数 int main()
接着运行到if判断语句,现在x=77, 77>0,所以进入if语句
进入if语句后,x=100,重新给x赋值了100,覆盖掉前面的77了,所以现在x=100
接着运行下一个 x /= 2 ,即 x=x/2 , x=100/2=50,计算完成后x的值为50了;
下一句就是输出语句了,所以第一句输出“if语句内,x=50”.
接着退出了if语句......
本节应该定义三个x,即要用三次int x。
第一个int x=77是全局变量,作用范围是整个程序。
第二个int x=10是局部变量,作用于整个函数main()。
第三个int x=100也是局部变量,但仅作用于if复合语句范围内。
三个x作用范围依次减小,范围大的可以作用于范围小的,范围小的不能作用于范围大的,且优先使用范围小的。
你在if语句中没有定义第三个x,而是直接使用x,且第二个x定义在if语句之后,所以你的if语句中使用的是第一个x。你之后定义了第二个x=10,此时你的第一个x=50,而fn1()在main函数之外,使用的是第一个x=50。
C语言入门
926020 学习 · 20793 问题
相似问题