打印

怎么区别两个返回值

[复制链接]
2170|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lium|  楼主 | 2011-6-14 16:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
设一个函数有两个返回值   

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


其实就是 这个子程序函数的两个参数要传递给主函数,怎么??
沙发
guoyt| | 2011-6-14 17:16 | 只看该作者
只能有一个返回值

使用特权

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

使用特权

评论回复
地板
yufe| | 2011-6-14 17:33 | 只看该作者
可以用指针或引用通过参数输出结果。也可以通过返回结构地址来返回结构。

使用特权

评论回复
5
llia| | 2011-6-14 21:01 | 只看该作者
也有能返回结构体的编译器

使用特权

评论回复
6
wangpe| | 2011-6-14 21:04 | 只看该作者
认为应该需要全局变量或指针等参加判断
如果单单就返回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的值;
}

使用特权

评论回复
7
langgq| | 2011-6-14 21:22 | 只看该作者
定义全局数组变量,例如  char  arr[2];
被调函数返回数组 arr[] 的索引或者下标值,告诉主调函数返回值的位置就行了。

使用特权

评论回复
8
wangzsa| | 2011-6-14 21:35 | 只看该作者
还有啦:主调函数根据被调函数返回值转向何处是很智能的,再写一个:
主调函数
chzr c;
.....
c=f( );  //被调函数 f( ) 返回值为 a 或 b ;

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

}
......

使用特权

评论回复
9
zhuww| | 2011-6-14 21:54 | 只看该作者
可以用引用,指针也可以,但是多用于字符串数组等返回个数比较多的情况

使用特权

评论回复
10
zhanglli| | 2011-6-14 22:11 | 只看该作者
方法一:
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
}

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
原野之狼 + 2
11
guoyt| | 2011-6-14 22:22 | 只看该作者
把需要返回的变量的指针传递给函数即可。
void ReadMeter(float *V,float *I)读取电压和电流值
{
……
   *V = 电压值;
   *I =  电流值;
}

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

使用特权

评论回复
12
hanwe| | 2011-6-14 22:42 | 只看该作者
返回指针比较方便,也可以跟全局变量配合使用

使用特权

评论回复
13
hanwe| | 2011-6-14 22:56 | 只看该作者
还是用标准的做法吧,乱七八糟没法维护;
最通用的做法才是最好的,

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

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

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

使用特权

评论回复
14
lium|  楼主 | 2011-6-14 23:09 | 只看该作者
如果单从实现性来看,大家的返回指针和结构体指针都可以,但是从程序的流程来讲,这样的设计是存在风险和缺陷的,讲错的地方,还往各位纠正

使用特权

评论回复
15
hgjinwei| | 2011-6-15 07:02 | 只看该作者
返回指针相对于全局变量传值可以降低一定的耦合度,但如果返回局部变量地址,就有可能得到一个假返回值;
结构体传参,效率方面有点欠缺,毕竟一来一回还得复制一遍结构体数据;
所以还是用指针比较靠谱:
void func(__INPUT int a, __OUTPUT int *b,__OUTPUT int *c)
{
          // function code
}

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
原野之狼 + 2
16
sjssjssjs| | 2011-6-15 08:54 | 只看该作者
用全局变量啊

使用特权

评论回复
17
oldchan| | 2011-6-15 10:17 | 只看该作者
个人认为,如果用全局变量,那就不用返回了,多此一举。。:(
建议还是用指针来传递。

使用特权

评论回复
18
zhengidea| | 2011-6-15 11:04 | 只看该作者
没看明白

使用特权

评论回复
19
zhengidea| | 2011-6-15 11:04 | 只看该作者
没看明白

使用特权

评论回复
20
nongfuxu| | 2011-6-15 13:16 | 只看该作者
与yufe同感

使用特权

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

本版积分规则

915

主题

9578

帖子

3

粉丝