• 全部
  • 问答

C++中怎么在一个函数中返回多个值?

Tlw_999 2016-12-16 08:45:18
最近在编写一个程序,由于对C++不是很熟练,所以遇到以下问题,希望大家帮个忙,谢谢!
main()
{
........
}
class A
{
f();
}
现在问题是我main函数中将一些输入参数传递进class A中的f()函数后,计算得出了a,b,c三个不同结果(比如一个是温度,一个是压力,一个是流量),现在希望将这三个结果在主函数main()中输出,我记得一个函数只能返回一个结果,网上也查了,说是用指针或者引用可以解决这个问题,不过由于我学习不扎实,有点搞不懂这个,现在手头上这个活又比较急,所以希望各位大神帮个忙,非常感谢!
...全文
8013 2 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
YapingXin 2016-12-19
引用 14 楼 david18lipu 的回复:
我也是初学者,能不能利用引用的方式,将需要返回的值放在参数列表里面
那就是我12楼举的例子。你把指针改成引用,也一样的能实现。
回复
david18lipu 2016-12-19
我也是初学者,能不能利用引用的方式,将需要返回的值放在参数列表里面
回复
ri_aje 2016-12-19
把返回值做成结构体。 std tuple 可以打包多份信息。 左值引用或指针都可以把返回值带出来。
回复
YapingXin 2016-12-19
返回多个值,对 C/C++ 来说,这有何难? 1. 最直接的办法,你把返回值封装在一个结构体里面,结构体里面想封装多少个值,就封装多少个值。 2. 返回值个数不算太多的话,你把返回值放在函数的参数里面,只不过,这些参数是作为输出的而不是作为输入的。
void foo(const int a, int* out1, int* out2)
{
    *out1 = a;
    *out2 = a+1;
}
回复
YapingXin 2016-12-19
返回多个值,对 C/C++ 来说,这有何难? 1. 最直接的办法,你把返回值封装在一个结构体里面,结构体里面想封装多少个值,就封装多少个值。 2. 返回值个数不算太多的话,你把返回值放在函数的参数里面,只不过,这些参数是作为输出的而不是作为输入的。
void foo(const int a_input, int* out1, int* out2)
{
    *out1 = a;
    *out2 = a+1;
}
回复
lxyscls 2016-12-19
引用
不过由于我学习不扎实,有点搞不懂这个,现在手头上这个活又比较急
1、返回struct或class instance 2、传入pointers或references,func内修改 不过我个人建议还是不要搞这活了,您这是挖坑的节奏啊
回复
赵4老师 2016-12-19
请那些喜欢将数组作为函数参数传来传去或作为函数返回值的码农思考一下为什么不把整个互联网内容当作函数参数传来传去或作为函数返回值呢?
回复
fefe82 2016-12-19
https://stackoverflow.com/documentation/c%2b%2b/487/returning-several-values-from-a-function#t=201612190536563747375
回复
jiqiang01234 2016-12-18
std::tuple<>
回复
paschen 版主 2016-12-17
方法一,将要返回的变量封装到结构体,然后返回结构体 方法二,将要返回的参数通过指针传入函数,函数中修改之
回复
接收指针参数用来返回,或者结构体
回复
背西风酒旗 2016-12-16
将参数的引用作为形参传入,形参实际上只是一个副本,但引用的副本任然指向参数,在函数内对引用的操作实际上就是在对引用所指向的参数进行操作,修改后的值也会得以保存,就相当于返回多个值
回复
060 2016-12-16
使用指针作为函数的参数,可以返回多个值。

如
bool foo(int input_argv, int* out_argv1, int* out_argv2)
{
   // do something
  if(NULL !=  out_argv1)
  {
   * out_argv1 = 222;
  }
    if(NULL !=  out_argv2)
  {
   * out_argv2 = 3333;
  }
}
调用:
int i1 = 10, i2 = 1, i3 = 2;
foo(i1, &i2, &i3);

也可以使用 引用,如:
bool foo(int input_argv, int& out_argv1, int& out_argv2)
{
   // do something
   
   out_argv1 = 222;
   out_argv2 = 3333;
}

调用:
int i1 = 10, i2 = 1, i3 = 2;
foo(i1, i2, i3);
回复
hongwenjun 2016-12-16


函数可以 返回一个结构体
结构 可以重新 赋值的
回复
hongwenjun 2016-12-16
引用百度上的
函数是可以返回结构体的。方法如下:(其它类似)
  以前以为函数的返回值只能是基本类型,但是今天被高手指出,函数的返回值可以是结构体的,特此编写了如下的测试程序:让大家见笑了。
#include <stdio.h>
typedef struct {
            int a;
            int b;
            int c;
        }str;
str change(str s)
{
    s.a += 1;
    s.b += 1;
    s.c += 1;
    return s;
}

int main(void)
{
    str s1, s2;
    s1.a = 1;
    s1.b = 1;
    s1.c = 1;
    s2 = change(s1);
    printf("s1.a = %d\ts1.b = %d\ts1.c = %d\n",s1.a, s1.b, s1.c);
    printf("s2.a = %d\ts2.b = %d\ts2.c = %d\n",s2.a, s2.b, s2.c);
    return 0;    
}
回复
hongwenjun 2016-12-16
typedef struct {
    double lng;
    double lat;
} Location;	



Location gps = { 119.465265, 29.1934702};                                            

                                                                                 
gps = transformFromWGSToGCJ(gps);

                              

Location transformFromWGSToGCJ(Location wgLoc)                          
{                                                                       
    Location mgLoc;                                                     
    if (outOfChina(wgLoc.lat, wgLoc.lng))                               
    {                                                                   
        mgLoc = wgLoc;                                                  
        return mgLoc;                                                   
    }                                                                   
    double dLat = transformLat(wgLoc.lng - 105.0, wgLoc.lat - 35.0);    
    double dLon = transformLon(wgLoc.lng - 105.0, wgLoc.lat - 35.0);    
    double radLat = wgLoc.lat / 180.0 * pi;                             
    double magic = sin(radLat);                                         
    magic = 1 - ee * magic * magic;                                     
    double sqrtMagic = sqrt(magic);                                     
    dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
    dLon = (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * pi);         
    mgLoc.lat = wgLoc.lat + dLat;                                       
    mgLoc.lng = wgLoc.lng + dLon;                                       
                                                                        
    return mgLoc;                                                       
}                                                                       
如上代码 函数是可以返回一个结构体的
回复
发帖
C++ 语言
创建于2007-09-28

5.9w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2016-12-16 08:45
社区公告
暂无公告