打印
[疑难问答]

想把多个值传出函数,用指针,试了一下没法编译成功

[复制链接]
1402|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Edisons|  楼主 | 2016-7-19 19:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有一个函数想把多个值传出函数,用指针,试了一下没法编译成功,想请问一下是什么原因?这个函数写在DS1302.C 里

void GET_TIME_DS1302(char *hour , char *min , char *mon , char *date)
{
        uchar ho,mi,mo,da;
        ho = RW_DATA_DS1302(0x83);  //read min
        mi = RW_DATA_DS1302(0x85);  //read hour
        mo = RW_DATA_DS1302(0x87);  //read date
        da = RW_DATA_DS1302(0x89);  //read mon
        *hour = &ho;
        *min = &mi;
        *mon = &mo;
        *date = &da;
}

把取出的时间日期使用指针在main函数中调用,但是没成功,这是怎么回事?想请教一下大家我这样调用是不是有问题?
#include"STC12.H"
#include"74HC595.H"
#include"DS1302.H"
#define uchar unsigned char
#define uint  unsigned int


void main ()
{
        char hour,min,mon,date;
        SET_TIME_DS1302();
        
        while(1)
        {
                GET_TIME_DS1302(char & hour , char & min , char & mon , char & date);
                if(*min < 0x01)//看取出的分钟是否小于0x01
                {
                  WR_595(0xff);//是的话就让74hc595全部输出1
                  OUT_595();
                }
                else
                {
                  WR_595(0x0f);//是的话就让74hc595 4个通道输出1
                  OUT_595();        
                }
        }


}
沙发
_gege| | 2016-7-19 19:30 | 只看该作者
使用数组吧,返回一个指针试试。

使用特权

评论回复
板凳
Mozarts| | 2016-7-19 19:33 | 只看该作者
GET_TIME_DS1302(char & hour , char & min , char & mon , char & date);
把char去掉应该可以的。

使用特权

评论回复
地板
Listate| | 2016-7-19 19:36 | 只看该作者
你上面贴的代码是 if(*min < 0x01),
不过没关系。这里确实也错了。

使用特权

评论回复
5
laozhongyi| | 2016-7-19 19:39 | 只看该作者
是的,min本身是char类型的,所以不需要*。

使用特权

评论回复
6
wanglaojii| | 2016-7-19 19:44 | 只看该作者
有点不明白,*min不是指min这个指针变量所指向地址中的值吗?

使用特权

评论回复
7
zhouhuanの| | 2016-7-19 19:48 | 只看该作者
你在main里面定义是 char hour,min,mon,date;这里min是char,不是指针。
在void GET_TIME_DS1302(char *hour , char *min , char *mon , char *date)里面,min是char*,确实是指针,就很容易混淆了。

使用特权

评论回复
8
handleMessage| | 2016-7-19 19:52 | 只看该作者
这个明显一个结构体,通过结构体指针变量传递数据

使用特权

评论回复
9
Edisons|  楼主 | 2016-7-19 19:58 | 只看该作者
Mozarts 发表于 2016-7-19 19:33
GET_TIME_DS1302(char & hour , char & min , char & mon , char & date);
把char去掉应该可以的。 ...

试了下编译,对if(*min == 0x00) 中*号报错

使用特权

评论回复
10
Edisons|  楼主 | 2016-7-19 19:59 | 只看该作者
本帖最后由 Edisons 于 2016-7-19 20:01 编辑

得回去补补指针了.....。。。。

使用特权

评论回复
11
bbapple| | 2016-7-19 20:03 | 只看该作者
hour = &ho;
  *min = &mi;
  *mon = &mo;
  *date = &da;

C语言基础不过关,这里错了。。。。

使用特权

评论回复
评论
datouyuan 2016-7-20 09:02 回复TA
说得太对了 
12
sourceInsight| | 2016-7-19 20:06 | 只看该作者
*hour=&ho是向指针指向的地址赋值,应该是hour=(char *)&ho

使用特权

评论回复
评论
datouyuan 2016-7-20 09:03 回复TA
C语言也不过关 
13
ta1ent| | 2016-7-19 21:47 | 只看该作者
本帖最后由 ta1ent 于 2016-7-19 21:49 编辑

  • *hour = &ho;
    *min = &mi;
    *mon = &mo;
    *date = &da;

错了!!
应该去掉 &:
  • *hour = ho;
    *min = mi;
    *mon =mo;
    *date = da;


还有比较部分应该是 min<0x01

还有就是不要一会儿char一会儿uchar,统一用uchar吧。




使用特权

评论回复
14
datouyuan| | 2016-7-20 09:08 | 只看该作者
ta1ent 发表于 2016-7-19 21:47*hour = &ho;
*min = &mi;
*mon = &mo;

楼上正解.
GET_TIME_DS1302(char & hour , char & min , char & mon , char & date);
我不知这句会不会有问题,一般是在函数声明这样写.
应该写成  GET_TIME_DS1302(& hour ,  & min ,  & mon , & date);

使用特权

评论回复
15
datouyuan| | 2016-7-20 09:13 | 只看该作者
你用多个指针,每个指针只传递一个数据,这样效率太低了.

多个数据互相有关联,可以用结构的方式,用一个指针传递多个数据.

使用特权

评论回复
16
台湾笙泉MCU| | 2016-7-20 10:07 | 只看该作者
学习了



笙泉单片机代理,QQ: 3166720948

使用特权

评论回复
17
oufuqiang| | 2016-7-20 10:57 | 只看该作者
用数组咯。

使用特权

评论回复
18
ticomi| | 2016-7-20 15:53 | 只看该作者
C的基础问题,建议看下周立功写的C语言基础书籍,这些问题说的非常清楚。

使用特权

评论回复
19
Edisons|  楼主 | 2016-8-17 19:51 | 只看该作者
_gege 发表于 2016-7-19 19:30
使用数组吧,返回一个指针试试。

恩  这个早就试过啦!!

使用特权

评论回复
20
Edisons|  楼主 | 2016-8-17 19:52 | 只看该作者
Mozarts 发表于 2016-7-19 19:33
GET_TIME_DS1302(char & hour , char & min , char & mon , char & date);
把char去掉应该可以的。 ...

是的,问题和这个差不多的,多谢啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

1426

帖子

0

粉丝