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

局部变量与全局变量的问题

请问,下面的程序中怎么理解?

#include <stdio.h>
int x =1;
    int fn1(int x)
    {
    int y,z;
    z=2;
    y=x+z;
    printf("y=%d\n",y);            /*这里为什么会输出“y=4”,在上面不是定义了“x=1;”的吗?应该是3啊!虽然我懂下面的调用函数中“fn(2)”又定义了x值,但是为什么程序不使用“x=1”计算呢?*/
    return 0;
    }
    
    int main()
    {
        fn1(2);
        int y=10;
        printf("x+y=%d",x+y);   /*这里为什么x值又是按照“x=1”计算的?*/
        return 0;
    }

该程序得出的结果是

y=4

x+y=11

请大神帮忙解答!谢谢!

http://img1.sycdn.imooc.com//55c5aff40001b43713660746.jpg

正在回答

2 回答

在main()函数中先调用了fn1(2),所以此时将实参传入,得x=2,这里的x为局部变量,y=2+2=4;

printf("x+y=%d",x+y);   这里用的x为全局变量,所以为10+1=11

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

沐竹雨 提问者

fn1(2)的优先级比较高吗?所有这类型的函数和调用,都是调用函数的赋值的优先级高吗?
2015-08-08 回复 有任何疑惑可以回复我~
#2

昨夜小楼泣东风 回复 沐竹雨 提问者

你理解错啦,调用函数时,参数是唯一进入函数内的接口。fn1(2)中的2 为实参,而fn1(int x)中的x为形参,实参与形参相对应。因此传入的值为2。
2015-08-08 回复 有任何疑惑可以回复我~
#3

沐竹雨 提问者 回复 昨夜小楼泣东风

忘了前面的概念!谢谢!懂了!
2015-08-08 回复 有任何疑惑可以回复我~
#4

小玖so 回复 昨夜小楼泣东风

形参跟实参不是太明确,我想问问,这里fn1(2)只调用一次形参嘛?
2015-08-24 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消
C语言入门
  • 参与学习       926020    人
  • 解答问题       20793    个

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

进入课程

局部变量与全局变量的问题

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