mook_dj 发表于 2012-5-25 23:22:34

关于流水灯里面的一个参数疑问?

//实例31:用数组作函数参数控制流水花样
#include<reg51.h>
/*************************************************
函数功能:延时约150ms
*************************************************/
void delay(void)
{
unsigned char m,n;
for(m=0;m<200;m++)
for(n=0;n<250;n++)
;
}
/*************************************************
函数功能:流水点亮P0 口8 位LED
*************************************************/
void led_flow(unsigned char a)//<======================括号里面的8有什么用,什么我把里面的8改成空格,流水灯的效果没有区别??
{
unsigned char i;
for(i=0;i<8;i++)
{
P1=a;
delay();
}
}
/*************************************************
函数功能:主函数
*************************************************/
void main(void)
{
while(1)
{
unsigned char code
Tab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
//流水灯控制码
led_flow(Tab);
}
}



问题在上面的注释里,个人是个C新手,希望热心人帮一把,先谢谢啦.

点颗烟取暖 发表于 2012-5-25 23:25:59

你看一下c语言关于形参的问题就知道了

mook_dj 发表于 2012-5-25 23:35:20

如果是参数,应该很严格的吧,什么改成空格或其它的数值如200等,也照流不误的呢?

y574924080 发表于 2012-5-25 23:37:48

本帖最后由 y574924080 于 2012-5-26 00:33 编辑

unsigned char a[]传递的是函数首地址

unsigned char a传递的也是首地址???

我还以为是数组下溢第一个地址咧

修改了~~~
////////////////////////////////////
//unsigned char a[]传递的是数组首地址
//打错字了

mook_dj 发表于 2012-5-25 23:51:16

4楼可能有些误会了.
1楼的程序没问题,我是从网上找来的,流水灯能运行.
我的问题是为什么里面的8改成空格或200,流水灯仍然能运行的呢?

無智 发表于 2012-5-25 23:54:53

答案就是四楼嘛

mook_dj 发表于 2012-5-25 23:57:05

無智 发表于 2012-5-25 23:54 static/image/common/back.gif
答案就是四楼嘛

我可以真是太菜了,4楼是答案我还不知道,能不能说的容易理解一点?

無智 发表于 2012-5-26 00:00:46

Tab[ ]是一个char型的数组,
led_flow(Tab); //这里形参传递是该数组的首地址。你的led_flow函数里边就是做了8个动作。
你将函数原型中的a改成200也是对你传入参数的前8个字符做操作。

如果你for到9或者更大,就会有异常了:){:handshake:}

haohan007 发表于 2012-5-26 00:02:44

unsigned char a[]告诉KEIL这里是数组在RAM里的首地址,就是形参数,建力个模型,模型的具体大小还未知。


unsigned char a告诉KEIL这是实参数了,这个模型的大小已确定,可以根据大小分配了。

無智 发表于 2012-5-26 00:02:58

在定义中:
void led_flow(unsigned char a) // 8的作用其实有点象注释;
在你明白只要做8次动作的前提下,完全可以定义为void led_flow(unsigned char *a)

mook_dj 发表于 2012-5-26 00:13:17

無智 发表于 2012-5-26 00:02 static/image/common/back.gif
在定义中:
void led_flow(unsigned char a) // 8的作用其实有点象注释;
在你明白只要做8次动作的前提 ...

我做了多次实验,也觉得它像一个注释,当时看见它是的括号里,所以以为它会对整个程序起重要作用,试着改了很多不同的数,结果流水灯效果没变,才发贴问个明白.

现在明白了,谢谢你们.

y574924080 发表于 2012-5-26 00:38:21

又学到东西了~~~~~~

無智 发表于 2012-5-26 12:40:37

mook_dj 发表于 2012-5-26 00:13 static/image/common/back.gif
我做了多次实验,也觉得它像一个注释,当时看见它是的括号里,所以以为它会对整个程序起重要作用,试着改了很 ...

推荐一本书给你《C prime plus》,对C语言有一个全面的讲述。

hittzp 发表于 2012-5-26 13:39:27

把8改成空格,应该效果是一样的

hittzp 发表于 2012-5-26 13:41:20

mook_dj 发表于 2012-5-26 00:13 static/image/common/back.gif
我做了多次实验,也觉得它像一个注释,当时看见它是的括号里,所以以为它会对整个程序起重要作用,试着改了很 ...

呵呵,还是把C好好认真学一遍吧

mook_dj 发表于 2012-5-28 00:38:59

汇编我会,看了几个C教程,总觉得有点烦琐,所以想从简单的C入手,记得以前学汇编时也是从简单的开始,点亮一个灯,点闪一个灯,流水灯等,后来基本学会汇编,我现在也用这个方法学C,从浅入深,例程基本都看明白,有时改改例程里面的东西,例如闪烁时间、流水灯的方向等等,觉得效果不错!
页: [1]
查看完整版本: 关于流水灯里面的一个参数疑问?