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

为什么这里的输出的是x=8,前面定义的不是静态局部变量吗?

为什么这里的输出的是x=8,前面定义的不是静态局部变量吗?

C
luan 2017-02-08 22:24:17
查看完整描述

3 回答

已采纳
?
朕日理万机

TA贡献27条经验 获得超28个赞

这个8是个巧合。这是个没初始化的值,可以使任何值。

说明一下,静态局部变量,所谓静态,就是生命周期从第一次初始化到整个程序结束,而且只初始化一次,如果下次再碰到,会自动跳过初始化这一行,所以下次调用fn()只会把x加倍,而不会重新变回1。

所谓局部,就是它只能在fn()这个函数里可见,你在别的地方比如main()函数里看不到它。所以你现在在main里又新定义了一个x,这个x跟前面那个静态局部x没有任何关系。而且你没有初始化它,所以x会等于一个不确定的值。你再跑几遍,或者在int x之前插个int i,j,k; 之类的语句,可能还会打出不同的值。

查看完整回答
2 反对 回复 2017-02-09
  • luan
    luan
    "会自动跳过初始化这一行",这一句话让我明白了,谢谢啦
?
自离

TA贡献2条经验 获得超1个赞

没错,fn里面的x是静态变量,和main里面的x是无关的;之所以main里面的x会等于8,原因是main里面的x没有初始化,是没有值得,所以main函数直接将x所在的内存空间里面的数取出,这个数是上一个使用该内存空间的程序所留下的,你如果将这个C语言重复运行几次,得到的x结果应该是不一样的。(这个知识点在指针与内存里面)

查看完整回答
1 反对 回复 2017-02-09
?
习惯受伤

TA贡献885条经验 获得超1144个赞

我同意一楼的说法,是巧合
查看完整回答
反对 回复 2017-02-09
?
琉璃丸子

TA贡献1条经验 获得超0个赞

这里的x=8与你fn函数里的x不是同一个x,你的fn函数里面的x是局部变量。

查看完整回答
反对 回复 2017-02-08
  • luan
    luan
    可是为什么会有x=8呢,这个8从哪里来的?
  • 琉璃丸子
    琉璃丸子
    这个x的8来自于你主函数里的输出语句,其他的来自于fn函数里的输出语句。
  • 3 回答
  • 0 关注
  • 1563 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信