单片机:下面两个延时函数有什么区别吗,为什么用第二个会不行?
#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++);
} 展开
一、
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++);
} 展开
4个回答
展开全部
形参 z 为 uint 型,而 局部变量 x、y 为 int;
使用②函数时,当z 的值 超出 x 的范围时,x 不管如何自加 都 达不到 z的值,这将是一个 死循环。
而①函数,就算 z 超出 x 范围,那也只是 x 无法 获得正确的初值而已,依然有一个初值 进行 运算,最后 都会 =0,所以不会死循环,只会 出点 不对时 的意外。
使用②函数时,当z 的值 超出 x 的范围时,x 不管如何自加 都 达不到 z的值,这将是一个 死循环。
而①函数,就算 z 超出 x 范围,那也只是 x 无法 获得正确的初值而已,依然有一个初值 进行 运算,最后 都会 =0,所以不会死循环,只会 出点 不对时 的意外。
更多追问追答
追问
是不是一个相当于whlie(z--),一个相当于whlie(z++)?whlie(z++)无限在循环?
追答
如果是 while(z++),那它也有 加到 尽头 ,又回到 0的 时候。
函数②相当于 一个在 0-99内自加的值,然后 硬是 拿去跟人家 1000比大小。
展开全部
void delay(uint z)
{ int x,y;
for(x=0;x<z;x++)
{for(y=0;y<110;y++)}
}
这样就可以了,另外既然已经声明了uint,这里就没必要再用int定义变量了。
{ 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++);
}不一样?
追答
刚刚开始学着改程序时,碰到过这个问题,就这么改好的,至于原理我也没弄懂。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一个是自减,一个是自加
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你所谓的“不行”,究竟具体是什么现象???
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询