打印
[51单片机]

自动局部变量变成了静态局部变量?

[复制链接]
996|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

在KEIL 2环境下,如图所示,程序加入menu()函数之后,正确运行,在menu()里面有一个局部变量‘dd’,按道理每次显示‘dd=0’,现在发现‘dd’在调用menu()之后值没有变为0,而是保持上一次的值,使得‘dd’值不断累加。请教各位是什么原因。

相关帖子

沙发
aozima| | 2015-5-11 12:48 | 只看该作者
dd末初始化即被引用(初始值可能为任意)
所以楼主的分析不管结果如何都没什么意义

使用特权

评论回复
板凳
ofourme| | 2015-5-11 13:00 | 只看该作者
C语言基础不过关。
静态局部变量能保证不被外部改变,保持上一次的值。
局部变量dd所占用的空间使用完后不会浪费CPU时间去清零,也即保持上一次的值,但是这个空间是有可能被其他函数使用的。

使用特权

评论回复
地板
wind~风| | 2015-5-11 13:03 | 只看该作者
dd并没有初始化,可能为任意值

使用特权

评论回复
5
ayb_ice| | 2015-5-11 14:18 | 只看该作者
1: 应该要初始化,否则没有实际意义
2: 因为KEILC51的局部变量不是通过堆栈分配的,是固定地址分配的,但不同函数之间的局部变量可以相互覆盖(前提是不相互调用),此例因为简单,没有其它函数与这个变量共享,所以就一直加了,如果复杂会是随机值

使用特权

评论回复
6
lylwff91128|  楼主 | 2015-5-11 14:19 | 只看该作者
aozima 发表于 2015-5-11 12:48
dd末初始化即被引用(初始值可能为任意)
所以楼主的分析不管结果如何都没什么意义 ...

初始到是为0,只是随着menu()的 每次调用,‘dd’不断增加,觉得是'dd'占用空间没有被释放。

使用特权

评论回复
7
lylwff91128|  楼主 | 2015-5-11 14:29 | 只看该作者
aozima 发表于 2015-5-11 12:48
dd末初始化即被引用(初始值可能为任意)
所以楼主的分析不管结果如何都没什么意义 ...

谢谢,搞清楚了

使用特权

评论回复
8
lylwff91128|  楼主 | 2015-5-11 14:32 | 只看该作者
ofourme 发表于 2015-5-11 13:00
C语言基础不过关。
静态局部变量能保证不被外部改变,保持上一次的值。
局部变量dd所占用的空间使用完后不 ...

谢谢,搞清楚了

使用特权

评论回复
9
lylwff91128|  楼主 | 2015-5-11 14:32 | 只看该作者
wind~风 发表于 2015-5-11 13:03
dd并没有初始化,可能为任意值

谢谢,搞清楚了

使用特权

评论回复
10
lylwff91128|  楼主 | 2015-5-11 14:34 | 只看该作者
ayb_ice 发表于 2015-5-11 14:18
1: 应该要初始化,否则没有实际意义
2: 因为KEILC51的局部变量不是通过堆栈分配的,是固定地址分配的 ...

谢谢你的那句“是固定地址分配的”,如果是这样就理解的通了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

183

帖子

1

粉丝