标题: 单片机C语言程序函数定义的疑问 请教论坛师傅们 [打印本页]

作者: SHANWAZI    时间: 2021-8-24 19:52
标题: 单片机C语言程序函数定义的疑问 请教论坛师傅们
通定义函数为:
void teset(void)//没有返回值  没有参数型函数
{

}

unsigned caar Teset(unsigned char Num,)//带返回值  和带参数型函数
{

}

今天在做实验时突发奇想定义了一个函数:
bit Teset(此括号里面为什么不能定义unsigned cahr 变量呢???)
{
bit teset;


retuan teset;
}

而是必须为如下:
bit Teset(unsigned char *Pointerb必须用以指针类型变量来进行参数传递呢????不是疑问)
{
bit flag;


retuan flag;

}
下面为调用时用为:
void Teset2()
{
bit flag;

flag=Teset(&Pointerb这里必须要&上才可以正常吧之值取出来????这是什么原理?????求师傅解答,)
if(flag==1)
{
....................................省略
}
}



作者: anchor8583    时间: 2021-8-24 21:42
问题发现的不对。谁说参数不能是unsigned char?谁说一定要用*Pointerb?C语言函数的参数可以有很多种类型,只不过你遇到的例子是用指针做参数罢了。随便挑一个函数:
void Dac1_Set_Vol(u16 vol)
{
        u16 temp;       
        if(vol>4999) vol=4999;
        temp=vol*4096.0/5000;
        DAC_SetChannel1Data(DAC_Align_12b_R,temp);
}
这是用STM32的DA产生电压进行输出的例子,u16就不是*Pointerb
作者: SHANWAZI    时间: 2021-8-25 02:08
anchor8583 发表于 2021-8-24 21:42
问题发现的不对。谁说参数不能是unsigned char?谁说一定要用*Pointerb?C语言函数的参数可以有很多种类型, ...

感谢您的耐心回复!是这样的请看倒数第一二个函数定义时使用的是bit型函数其返回值为bit型!!!!而在此函数圆括号中(使用整形变量来传递参数时形参传递参数时会发生错误而使用指针变量时就不会)
作者: 菜鸟yc    时间: 2021-8-25 09:11
想必阁下用的是51单片机吧,我用51内核的单片机写了如下代码,编译通过,运行正常。供君参考。

1.png (40.39 KB, 下载次数: 52)

1.png

作者: SHANWAZI    时间: 2021-8-25 10:09
菜鸟yc 发表于 2021-8-25 09:11
想必阁下用的是51单片机吧,我用51内核的单片机写了如下代码,编译通过,运行正常。供君参考。

感谢回复  是的使用的是51c语言  感谢您的解答回去好好研究一下!冒昧问一下您的这个背景可以共享不!挺好看的!
作者: 菜鸟yc    时间: 2021-8-25 11:48
SHANWAZI 发表于 2021-8-25 10:09
感谢回复  是的使用的是51c语言  感谢您的解答回去好好研究一下!冒昧问一下您的这个背景可以共享不!挺 ...

你可以做如下修改测试一下。函数原型:
  1. bit Teset(unsigned cahr val)
  2. {
  3.     bit teset;


  4.     return teset;
  5. }
复制代码

调用程序为:
  1. void Teset2()
  2. {
  3.     if(Teset(看自己需要填个实参))
  4.     {
  5.         ....................................省略
  6.     }
  7. }
复制代码


作者: 菜鸟yc    时间: 2021-8-25 11:53
SHANWAZI 发表于 2021-8-25 10:09
感谢回复  是的使用的是51c语言  感谢您的解答回去好好研究一下!冒昧问一下您的这个背景可以共享不!挺 ...

本站也有类似的背景色设置,http://www.51hei.com/bbs/dpj-188186-1.html
CSDN等都有的,你可以网上搜索下,自己“替换”一下
我的是根据自己的喜好自己在软件“设置”的,如果你需要的话,我可以给你分享我的“设置”截图
作者: SHANWAZI    时间: 2021-8-25 20:09
菜鸟yc 发表于 2021-8-25 11:48
你可以做如下修改测试一下。函数原型:

调用程序为:

非常感谢  您上述中我已经做实验函数原型括号内带字节型参数在进行传递数据时就会出错我是这样的如下:

bit Teset(unsigned char Value/*字节形参*/)
{
bit TesetFlag;

//对Value进行处理省略。。。。。。。。。。。
//处理完毕标志位置位
TesetFlag=1;

return TesetFlag;//返回标志位
}

//以下为主函数调用上面函数时的如下:
void main()
{
bit TesetFlag111;
unsigned char  Value111=100;

while(1)
{
TesetFlag111=Teset(unsigned char Value111/*字节实参*/);
if(TesetFlag111==1)
{
//处理别的省略
}
}
}

1:问题就是在这里实参给形参传递参数时实参的实际值没有完全传递给形参 而发生了改变这是我一直困惑的
2:使用字节型函数如:
unsigned char Teset(unsigned char Value)
{

}
进行参数进行传递就形参与实参参数传递时不会发生改变!!!!!!!!!!
作者: lkc8210    时间: 2021-8-25 21:30
SHANWAZI 发表于 2021-8-25 20:09
非常感谢  您上述中我已经做实验函数原型括号内带字节型参数在进行传递数据时就会出错我是这样的如下:
...

用的时候是这样写的! 老弟!  !  !  !  !  !  !  !  !  !  !  !  !
TesetFlag111=Teset(Value111/*字节实参*/);
作者: SHANWAZI    时间: 2021-8-25 23:35
lkc8210 发表于 2021-8-25 21:30
用的时候是这样写的! 老弟!  !  !  !  !  !  !  !  !  !  !  !  !
TesetFlag111=Teset(V ...

不好意思  手机打字不太方便打错了
作者: 188610329    时间: 2021-8-28 18:26
看你发的代码,里面错误好多,就讲讲关键的吧。
首先:
bit test_bit_return(unsigned char dat)
{
      bit   testbit;

}
作者: 188610329    时间: 2021-8-28 18:35
看了你发的内容,实在是……,觉得还是用具体的代码跟你讲吧。
首先,声明位变量。
bit        testflag1,testflag2;

再定义返回位的子函数,
bit        test_bit_return(unsigned char dat)
{
        bit flag;
        if(dat == 0x00)        flag = 1;
        else        flag = 0;
        return        flag;
}
最后在main函数中用以下调用。
testflag1 = test_bit_return(0x00);
testflag2 = test_bit_return(0x12);

你可以得到 testflag1 = 1  , testflag2 = 0,  





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