[51单片机] 自动局部变量变成了静态局部变量?

[复制链接]
 楼主| lylwff91128 发表于 2015-5-11 11:53 | 显示全部楼层 |阅读模式

在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并没有初始化,可能为任意值
ayb_ice 发表于 2015-5-11 14:18 | 显示全部楼层
1: 应该要初始化,否则没有实际意义
2: 因为KEILC51的局部变量不是通过堆栈分配的,是固定地址分配的,但不同函数之间的局部变量可以相互覆盖(前提是不相互调用),此例因为简单,没有其它函数与这个变量共享,所以就一直加了,如果复杂会是随机值
 楼主| lylwff91128 发表于 2015-5-11 14:19 | 显示全部楼层
aozima 发表于 2015-5-11 12:48
dd末初始化即被引用(初始值可能为任意)
所以楼主的分析不管结果如何都没什么意义 ...

初始到是为0,只是随着menu()的 每次调用,‘dd’不断增加,觉得是'dd'占用空间没有被释放。
 楼主| lylwff91128 发表于 2015-5-11 14:29 | 显示全部楼层
aozima 发表于 2015-5-11 12:48
dd末初始化即被引用(初始值可能为任意)
所以楼主的分析不管结果如何都没什么意义 ...

谢谢,搞清楚了
 楼主| lylwff91128 发表于 2015-5-11 14:32 | 显示全部楼层
ofourme 发表于 2015-5-11 13:00
C语言基础不过关。
静态局部变量能保证不被外部改变,保持上一次的值。
局部变量dd所占用的空间使用完后不 ...

谢谢,搞清楚了
 楼主| lylwff91128 发表于 2015-5-11 14:32 | 显示全部楼层
wind~风 发表于 2015-5-11 13:03
dd并没有初始化,可能为任意值

谢谢,搞清楚了
 楼主| lylwff91128 发表于 2015-5-11 14:34 | 显示全部楼层
ayb_ice 发表于 2015-5-11 14:18
1: 应该要初始化,否则没有实际意义
2: 因为KEILC51的局部变量不是通过堆栈分配的,是固定地址分配的 ...

谢谢你的那句“是固定地址分配的”,如果是这样就理解的通了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

183

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部