打印

求教c高手 在线等

[复制链接]
3124|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangzk|  楼主 | 2010-6-7 13:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wangzk 于 2010-6-7 13:55 编辑

设一个函数有两个返回值   

主函数调用这个函数,怎么区别这两个返回值呢???


其实就是 这个子程序函数的两个参数要传递给主函数,怎么??

相关帖子

沙发
ayb_ice| | 2010-6-7 13:25 | 只看该作者
只能有一个返回值

使用特权

评论回复
板凳
arthur0561| | 2010-6-7 13:26 | 只看该作者
描述的不是很清楚,对于主函数来说调用的函数返回值仅仅是个数字,不是变量

使用特权

评论回复
地板
jacker2000| | 2010-6-7 13:29 | 只看该作者
5
HWM| | 2010-6-7 13:38 | 只看该作者
re LZ:

可以用指针或引用通过参数输出结果。也可以通过返回结构地址来返回结构。

使用特权

评论回复
6
HWM| | 2010-6-7 13:41 | 只看该作者
to 4L:

这样也许会适得其反。

使用特权

评论回复
7
airwill| | 2010-6-7 13:44 | 只看该作者
也有能返回结构体的编译器

使用特权

评论回复
8
一棵小草| | 2010-6-7 13:46 | 只看该作者
认为应该需要全局变量或指针等参加判断
如果单单就返回a和b,而没有其他条件,我也想知道高手怎么做的。


bit     flag_witch;用一个全局标志

uchar    wtt()
{
         uchar    a,b;
         if( ×××==1)  
         {
                   flag_witch=1;
                   return      a;
         }
         else
         {
                  flag_witch=0;
                  return      b;
         }
}

main()
{
          uchar    c;
          ------
          ------
          c =    wtt();           
          if(flag_witch==1)  c保存的是a的值;
          else                      c保存的是b的值;
}

使用特权

评论回复
9
刘前辈| | 2010-6-7 14:05 | 只看该作者
本帖最后由 刘前辈 于 2010-6-7 14:33 编辑

haha: 我这么干:
定义全局数组变量,例如  char  arr[2];
被调函数返回数组 arr[] 的索引或者下标值,告诉主调函数返回值的位置就行了。

使用特权

评论回复
10
wangzk|  楼主 | 2010-6-7 14:12 | 只看该作者
9楼的做法 好呀!!:victory: 9# 刘前辈

使用特权

评论回复
11
刘前辈| | 2010-6-7 14:28 | 只看该作者
本帖最后由 刘前辈 于 2010-6-7 14:33 编辑

还有啦:主调函数根据被调函数返回值转向何处是很智能的,再写一个:
主调函数
chzr c;
.....
c=f( );  //被调函数 f( ) 返回值为 a 或 b ;

switch(c){
case a :  转向....
case b :  转向....

}
......

使用特权

评论回复
12
ciniao| | 2010-6-7 15:28 | 只看该作者
可以用引用,指针也可以,但是多用于字符串数组等返回个数比较多的情况

使用特权

评论回复
13
原野之狼| | 2010-6-7 15:52 | 只看该作者
方法一:
typedef struct _tag_fn_ret
{
    char val1;
    char val2;
} FN_RET,*P_FN_RET;

FN_RET fn(void)
{
     FN_RET ret;
     // add extra codes here

     return ret;
}

方法二:
void fn(P_FN_RET p_ret)
{
    // add extra codes here
}

方法三:
void fn(char *p_val1,char *p_val2)
{
      // add extra codes here
}

使用特权

评论回复
14
mohanwei| | 2010-6-7 16:35 | 只看该作者
把需要返回的变量的指针传递给函数即可。
void ReadMeter(float *V,float *I)读取电压和电流值
{
……
   *V = 电压值;
   *I =  电流值;
}

使用的时候:
float voltage,current;
ReadMeter(&voltage,&current);//调用函数,读取电压和电流值

使用特权

评论回复
15
maomao2126| | 2010-6-7 17:29 | 只看该作者
返回指针比较方便,也可以跟全局变量配合使用

使用特权

评论回复
16
gguoke@126.com| | 2010-6-7 20:15 | 只看该作者
搞个全局变量就成了

使用特权

评论回复
17
Quentin| | 2010-6-7 20:21 | 只看该作者
学习

使用特权

评论回复
18
后学| | 2010-6-7 20:45 | 只看该作者
还是用标准的做法吧,乱七八糟没法维护;
最通用的做法才是最好的,

1、返回结构体;也可以考虑枚举;
2、调用函数时传递指针;

大规模的程序,还是要控制全局变量,耦合太强了,没法维护,
如果有学过OO的,可以参考类的思想进行封装,

直接返回指针是不对的,局部变量保存在栈帧里,函数退出后这个指针就没有意义了,

使用特权

评论回复
19
hgjinwei| | 2010-6-7 21:54 | 只看该作者
传个指针过去,要什么都能给你返回来。
14L的方法一不好,返回auto变量地址,容易发生悲剧;

使用特权

评论回复
20
有意思| | 2010-6-8 00:24 | 只看该作者
好的软件架构,不应该出现类似的疑问

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
pentral0311 + 1 这才是编程的硬道理,一个函数需有两个值被 ...
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:[url=http://huiqianxi.taobao.com]http://huiqianxi.

90

主题

678

帖子

0

粉丝