找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2811|回复: 11
打印 上一主题 下一主题
收起左侧

单片机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)
{
....................................省略
}
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:94657 发表于 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

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:232366 发表于 2021-8-25 02:08 | 只看该作者
anchor8583 发表于 2021-8-24 21:42
问题发现的不对。谁说参数不能是unsigned char?谁说一定要用*Pointerb?C语言函数的参数可以有很多种类型, ...

感谢您的耐心回复!是这样的请看倒数第一二个函数定义时使用的是bit型函数其返回值为bit型!!!!而在此函数圆括号中(使用整形变量来传递参数时形参传递参数时会发生错误而使用指针变量时就不会)
回复

使用道具 举报

地板
ID:711539 发表于 2021-8-25 09:11 | 只看该作者
想必阁下用的是51单片机吧,我用51内核的单片机写了如下代码,编译通过,运行正常。供君参考。

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

1.png
回复

使用道具 举报

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

感谢回复  是的使用的是51c语言  感谢您的解答回去好好研究一下!冒昧问一下您的这个背景可以共享不!挺好看的!
回复

使用道具 举报

6#
ID:711539 发表于 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. }
复制代码

回复

使用道具 举报

7#
ID:711539 发表于 2021-8-25 11:53 | 只看该作者
SHANWAZI 发表于 2021-8-25 10:09
感谢回复  是的使用的是51c语言  感谢您的解答回去好好研究一下!冒昧问一下您的这个背景可以共享不!挺 ...

本站也有类似的背景色设置,http://www.51hei.com/bbs/dpj-188186-1.html
CSDN等都有的,你可以网上搜索下,自己“替换”一下
我的是根据自己的喜好自己在软件“设置”的,如果你需要的话,我可以给你分享我的“设置”截图
回复

使用道具 举报

8#
ID:232366 发表于 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)
{

}
进行参数进行传递就形参与实参参数传递时不会发生改变!!!!!!!!!!
回复

使用道具 举报

9#
ID:161164 发表于 2021-8-25 21:30 | 只看该作者
SHANWAZI 发表于 2021-8-25 20:09
非常感谢  您上述中我已经做实验函数原型括号内带字节型参数在进行传递数据时就会出错我是这样的如下:
...

用的时候是这样写的! 老弟!  !  !  !  !  !  !  !  !  !  !  !  !
TesetFlag111=Teset(Value111/*字节实参*/);
回复

使用道具 举报

10#
ID:232366 发表于 2021-8-25 23:35 来自手机 | 只看该作者
lkc8210 发表于 2021-8-25 21:30
用的时候是这样写的! 老弟!  !  !  !  !  !  !  !  !  !  !  !  !
TesetFlag111=Teset(V ...

不好意思  手机打字不太方便打错了
回复

使用道具 举报

11#
ID:624769 发表于 2021-8-28 18:26 | 只看该作者
看你发的代码,里面错误好多,就讲讲关键的吧。
首先:
bit test_bit_return(unsigned char dat)
{
      bit   testbit;

}
回复

使用道具 举报

12#
ID:624769 发表于 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,  
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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