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

稍稍改了改代码,可是有些不理解的结果,万望解答!!感谢!!

#include <stdio.h>
void fn()
{
    static int x = 1;   //定义静态局部变量
    x*=2;
    printf("x=%d\n",x);    
}


int main()
{
    int i;
    for(i=0;i<5;i++)
    {
        fn();
    }
    int x;      //调用外部变量
    printf("x=%d\n",x);
    fn();
 return 0;
}
int x=100;

我去掉了调用外部变量的extern单词,并在return前又调用了一次fn。如以上函数。

http://img1.sycdn.imooc.com//5804f43b00014e8300570193.jpg这是运行结果,注意最后两行,倒数第二行看来是调用的最初的静态全局变量1,说明x值还是1,为什么最后一行的值又成了64了呢??


正在回答

4 回答

下面是我的个人观点,我也不知道对不对,因为我也还在学习。你说倒数第二行是最初的静态局部变量1,我觉得不是这样的,你后来的那句int x并不能取到什么值,因为你的x没有初始化,而那个值应该是系统给的,你可以试试把那两行改成int y;printf("y=%d\n",y);,你的倒数第二行应该会变成y=1,至于最后那个64,就是最后静态变量x的值了

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

Dancing_code 提问者

懂了 非常感谢!
2016-10-18 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//589b28c90001c39808270427.jpg为什么我这里倒数第二行试试x=8?

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

tiger热热

你应该 extern int x 这样才可以用到外部变量才会是100
2017-02-24 回复 有任何疑惑可以回复我~
#2

Dancing_code 提问者

我觉得可能就是因为那个值在主函数中没有定义,所以是系统随机给的,编译器不同的原因吧……
2017-03-10 回复 有任何疑惑可以回复我~

#include <stdio.h>

void fn()

{

    static int x = 1;   //定义静态局部变量

    x*=2;

    printf("x=%d\n",x);     

}

int main()

{

    int i;

    for(i=0;i<5;i++)

    {

        fn();

    }

    extern int x; 

printf("x=%d\n",x); //调用外部变量

    fn();

    return 0;

}

int x=100;

为什么编译出错:syntax error : missing ';' before 'type'    和

'x' : undeclared identifier;

这里并没有语法错误和 声明错误啊。



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

Dancing_code 提问者

我复制了你的编译没错呀
2017-03-10 回复 有任何疑惑可以回复我~

还是不太明白 最后那个64 是怎么来的?? 

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

Dancing_code 提问者

在fn函数中的x值是没有变的,还是上次的32*2
2017-03-10 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

稍稍改了改代码,可是有些不理解的结果,万望解答!!感谢!!

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