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

来源:5-10 局部与全局

慕斯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;

}


写回答 关注

3回答

  • 奥德彪拉香蕉
    2024-08-23 11:47:50

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

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


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


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

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


  • 奥德彪拉香蕉
    2024-08-23 11:32:15

    因为被覆盖住了,

    代码运行,

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

  • upc1904011226
    2024-02-22 20:35:56

    本节应该定义三个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语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926020 学习 · 20793 问题

查看课程

相似问题