为了账号安全,请及时绑定邮箱和手机立即绑定

int x =10在这个位置为什么fn1()输出的不是10而是50

#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;

}


正在回答

3 回答

搞错问题了,重新回答一下。

还有你搞错了,输出50那个代码是if语句的输出,不是fn1()的输出。


你这把int x= 10; 放到了主函数调用无参函数fn1()前面,


无参函数fn1(),不论你在main函数中哪个位置定义int x = 10;

无参函数fn1()里面运行的x的值都是使用全局变量定义的 int x=77的值。所以fn1() = 77.


0 回复 有任何疑惑可以回复我~

因为被覆盖住了,

代码运行,

第一第二行后得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语句......

0 回复 有任何疑惑可以回复我~

本节应该定义三个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。


1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

int x =10在这个位置为什么fn1()输出的不是10而是50

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信