标题: 菜鸟请教C51问题 上面的这个写法和下面的这种写法有什么区别? [打印本页]

作者: bfdz    时间: 2024-7-1 09:17
标题: 菜鸟请教C51问题 上面的这个写法和下面的这种写法有什么区别?
void delay(uint n){     
   while(n--)
     {         
          Delay1ms();
     }
}
请教老师上面的这个写法和下面的这种写法有什么区别?
void delay()
{   
       uint n;
      while(n--)
     {         
          Delay1ms();
     }
}




作者: j1ason    时间: 2024-7-1 15:34
第二种方式主要是n赋值问题,如果实际运用中,第一种方式是可行的。
作者: zyftank    时间: 2024-7-1 17:43
上面带参,n是在调用的时候被赋值了,下面这个函数最好别用,在函数里定义个变量,还不初始化,被调用的时候,n还不知道被赋值多少。
作者: bfdz    时间: 2024-7-2 08:29
感谢老师!!!

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

最好还是用上面的那个。
谢谢了
作者: 123156fsadf    时间: 2024-7-2 17:24
bfdz 发表于 2024-7-2 08:29
感谢老师!!!

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

两个函数的n都是局部变量,都只能在delay函数中使用,另外就是最好不要用这种软延时,严重破坏程序实时性;建议用定时器方式做延时
作者: xiaobendan001    时间: 2024-7-3 08:06
上面那个是参数,是被调用者赋值的,就是调用者可以控制这个数的大小。下面那个只是局部变量,调用者无法掌控,即使在函数里面被准确赋值,也只能实现固定的值。何况你都不赋值,大概率是不确定的。
作者: cy009    时间: 2024-7-3 09:09
上面的灵活,下面的呆板
作者: bfdz    时间: 2024-7-3 11:03
xiaobendan001 发表于 2024-7-3 08:06
上面那个是参数,是被调用者赋值的,就是调用者可以控制这个数的大小。下面那个只是局部变量,调用者无法掌 ...

多谢!多谢!感觉这下彻底想通了
作者: xxxevery    时间: 2024-7-4 11:02
下面的这种写法没法达到目的啊,n只被声明了一下,当然在keil中会默认初始化为零,后面也不再赋值,结果就是进while马上退出来,当然也不会出错,总可以延时几个微秒吧
作者: @西风    时间: 2024-7-5 16:37
带参数的函数,和不带参数的函数区别啊
作者: rayin    时间: 2024-7-6 08:06
建议用第一种方法, 可以设定延时时间.
第二种方式有问题:n是局部变量, 局部变量不赋值,n的值就不确定,会导致执行结果不确定.
作者: bfdz    时间: 2024-7-6 08:11
多谢各位老师!

我再重新学习一下带参数和不带参数函数的课程
作者: 飞云居士    时间: 2024-7-15 10:01
下面的延时是固定的(从32768减到0的时间)。上面的延时可以有调用者设定延时时间。
作者: 青草麦田    时间: 2024-7-17 00:22
一个传参,一个是局部变量

作者: 乡海峰    时间: 2024-7-17 14:14
以上大神讲的太好了
作者: ankangyu    时间: 2024-7-18 14:04
第二种内部应该给n赋初始值,是一个固定值,第一种是调用时赋值,是一个灵活赋值。
作者: 1853403148    时间: 2024-7-18 17:58
这两个程序函数在功能和预期行为上有很大的区别。

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

第二个函数 void delay()
这个函数没有参数。它试图使用一个未初始化的局部变量 n,并在 while 循环中递减 n。但是,由于 n 没有被初始化,它的值是不确定的,可能是任何数字
作者: a399288395    时间: 2024-7-19 08:32
一个带形参一个不带,第一种写法更实用,方便函数的调用
作者: Jun默默淡定    时间: 2024-7-19 10:40
上面的delay()函数是带形参的,调用的时候可以设置形参的值来修改延时的长短,调用该函数的时候更加的灵活自由;下面的的相对来说就死板一些,但是在一些场合,比如说编写模拟IIC之类的时候,这样要固定延时长短的会比较合适




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1