用keil编写C51程序,变量顺序为什么会影响实际运行结果?

如上图(两处红色标记),我开始把变量y放在前面(第二张图),程序在开发板怎么也运行不了,百思不得其解,后来把i和y调换位置才完美运行,反复试验多次都是如此?调换k不影响,也就是说y放首位影响。请教高人,不胜感激。

变量定义了但是没有初始化(赋值),这样变量地址产生的是一个随机数,这个数不一定是0。目测是数码管显示的程序,不知道你子程序是怎样写的,如果子程序有对变量赋初值,变量声明可以不用初始化,反之就下面这样改吧。与顺序无关。
uint i=0,y=0,k=0;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-11
因为i,y,k没有赋初值,所以编译的时候顺序不同,那么实际初值也不一样。
当你使用y时,是直接y++的,所以如果此时y初值已经大于20了,那么就要等到y累加到ffff,再溢出才能回到20,估计就要等很长时间了。
现在有两个办法,可以让你不用纠结在顺序上:
1、定义的时候
uint y=0,i=0,k=0;
2、
....
y++;
if(y>=20)
.....本回答被提问者和网友采纳
第2个回答  2013-10-12
告诉你一个你不知道的公开密秘,全局变量可以不赋初值,但局部变量赋初值里必须的,全局可以不初化是因为KeiL默认有个啥51的文件在复位时就将Xdata全置0了,当然你也可以修改它,让它不帮你初始化内存,比如如果你要区分断电复位和看门狗复就须设为不淸0。
相似回答