单片机:下面两个延时函数有什么区别吗,为什么用第二个会不行?

#defineucharunsignedchar一、voiddelay(uintz){intx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);... #define uchar unsigned char
一、
void delay(uint z)
{ int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

二、
void delay(uint z)
{ int x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
展开
 我来答
烟火夜空
2013-05-16 · TA获得超过6623个赞
知道大有可为答主
回答量:1678
采纳率:93%
帮助的人:566万
展开全部
形参 z 为 uint 型,而 局部变量 x、y 为 int;
使用②函数时,当z 的值 超出 x 的范围时,x 不管如何自加 都 达不到 z的值,这将是一个 死循环。
而①函数,就算 z 超出 x 范围,那也只是 x 无法 获得正确的初值而已,依然有一个初值 进行 运算,最后 都会 =0,所以不会死循环,只会 出点 不对时 的意外。
更多追问追答
追问
是不是一个相当于whlie(z--),一个相当于whlie(z++)?whlie(z++)无限在循环?
追答
如果是 while(z++),那它也有 加到 尽头 ,又回到 0的 时候。
函数②相当于 一个在 0-99内自加的值,然后 硬是 拿去跟人家 1000比大小。
wannenggong9559f
生活家

推荐于2017-12-15 · 关注于个人成长
知道大有可为答主
回答量:3691
采纳率:82%
帮助的人:658万
展开全部
void delay(uint z)
{ int x,y;
for(x=0;x<z;x++)
{for(y=0;y<110;y++)}

}
这样就可以了,另外既然已经声明了uint,这里就没必要再用int定义变量了。
追问
这样和我的有什么区别void delay(uint z)
{ int x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}不一样?
追答
刚刚开始学着改程序时,碰到过这个问题,就这么改好的,至于原理我也没弄懂。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wy8792408
2013-05-16 · TA获得超过109个赞
知道答主
回答量:141
采纳率:0%
帮助的人:48.7万
展开全部
一个是自减,一个是自加
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一剑出血
高粉答主

2017-12-15 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.7亿
展开全部
你所谓的“不行”,究竟具体是什么现象???
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式