找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1007|回复: 18
收起左侧

菜鸟请教C51问题 上面的这个写法和下面的这种写法有什么区别?

  [复制链接]
ID:477441 发表于 2024-7-1 09:17 | 显示全部楼层 |阅读模式
void delay(uint n){     
   while(n--)
     {         
          Delay1ms();
     }
}
请教老师上面的这个写法和下面的这种写法有什么区别?
void delay()
{   
       uint n;
      while(n--)
     {         
          Delay1ms();
     }
}



回复

使用道具 举报

ID:466997 发表于 2024-7-1 15:34 | 显示全部楼层
第二种方式主要是n赋值问题,如果实际运用中,第一种方式是可行的。
回复

使用道具 举报

ID:74687 发表于 2024-7-1 17:43 | 显示全部楼层
上面带参,n是在调用的时候被赋值了,下面这个函数最好别用,在函数里定义个变量,还不初始化,被调用的时候,n还不知道被赋值多少。
回复

使用道具 举报

ID:477441 发表于 2024-7-2 08:29 | 显示全部楼层
感谢老师!!!

有些明白了,是不是上面的那个 n 可以在全局使用  ,下面的那个 n 只是在自己的子函数使用,而且 n 的值还容易不明确,

最好还是用上面的那个。
谢谢了
回复

使用道具 举报

ID:744809 发表于 2024-7-2 17:24 | 显示全部楼层
bfdz 发表于 2024-7-2 08:29
感谢老师!!!

有些明白了,是不是上面的那个 n 可以在全局使用  ,下面的那个 n 只是在自己的子函数使 ...

两个函数的n都是局部变量,都只能在delay函数中使用,另外就是最好不要用这种软延时,严重破坏程序实时性;建议用定时器方式做延时
回复

使用道具 举报

ID:1109793 发表于 2024-7-3 08:06 | 显示全部楼层
上面那个是参数,是被调用者赋值的,就是调用者可以控制这个数的大小。下面那个只是局部变量,调用者无法掌控,即使在函数里面被准确赋值,也只能实现固定的值。何况你都不赋值,大概率是不确定的。
回复

使用道具 举报

ID:619259 发表于 2024-7-3 09:09 | 显示全部楼层
上面的灵活,下面的呆板
回复

使用道具 举报

ID:477441 发表于 2024-7-3 11:03 | 显示全部楼层
xiaobendan001 发表于 2024-7-3 08:06
上面那个是参数,是被调用者赋值的,就是调用者可以控制这个数的大小。下面那个只是局部变量,调用者无法掌 ...

多谢!多谢!感觉这下彻底想通了
回复

使用道具 举报

ID:59202 发表于 2024-7-4 11:02 | 显示全部楼层
下面的这种写法没法达到目的啊,n只被声明了一下,当然在keil中会默认初始化为零,后面也不再赋值,结果就是进while马上退出来,当然也不会出错,总可以延时几个微秒吧
回复

使用道具 举报

ID:1043262 发表于 2024-7-5 16:37 | 显示全部楼层
带参数的函数,和不带参数的函数区别啊
回复

使用道具 举报

ID:517951 发表于 2024-7-6 08:06 | 显示全部楼层
建议用第一种方法, 可以设定延时时间.
第二种方式有问题:n是局部变量, 局部变量不赋值,n的值就不确定,会导致执行结果不确定.
回复

使用道具 举报

ID:477441 发表于 2024-7-6 08:11 | 显示全部楼层
多谢各位老师!

我再重新学习一下带参数和不带参数函数的课程
回复

使用道具 举报

ID:404160 发表于 2024-7-15 10:01 | 显示全部楼层
下面的延时是固定的(从32768减到0的时间)。上面的延时可以有调用者设定延时时间。
回复

使用道具 举报

ID:811253 发表于 2024-7-17 00:22 | 显示全部楼层
一个传参,一个是局部变量
回复

使用道具 举报

ID:406282 发表于 2024-7-17 14:14 | 显示全部楼层
以上大神讲的太好了
回复

使用道具 举报

ID:587810 发表于 2024-7-18 14:04 | 显示全部楼层
第二种内部应该给n赋初始值,是一个固定值,第一种是调用时赋值,是一个灵活赋值。
回复

使用道具 举报

ID:1128908 发表于 2024-7-18 17:58 | 显示全部楼层
这两个程序函数在功能和预期行为上有很大的区别。

第一个函数 void delay(uint n)
这个函数是带参数的。它接受一个无符号整数 n 作为输入,并循环 n 次,每次循环中调用 Delay1ms() 函数来产生大约1毫秒的延迟。因此,这个函数的总延迟时间大致是 n 毫秒(假设 Delay1ms() 函数确实产生了精确的1毫秒延迟)。

第二个函数 void delay()
这个函数没有参数。它试图使用一个未初始化的局部变量 n,并在 while 循环中递减 n。但是,由于 n 没有被初始化,它的值是不确定的,可能是任何数字
回复

使用道具 举报

ID:230500 发表于 2024-7-19 08:32 | 显示全部楼层
一个带形参一个不带,第一种写法更实用,方便函数的调用
回复

使用道具 举报

ID:136106 发表于 2024-7-19 10:40 | 显示全部楼层
上面的delay()函数是带形参的,调用的时候可以设置形参的值来修改延时的长短,调用该函数的时候更加的灵活自由;下面的的相对来说就死板一些,但是在一些场合,比如说编写模拟IIC之类的时候,这样要固定延时长短的会比较合适
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表