• C++: 利用指针和结构体实现一个函数返回多个值


    在函数执行到return语句时,将不再向下执行,那么如何让函数一次性返回多个值?一般可以用两种方式解决这个问题,利用指针利用结构体

    一. 利用指针
    直接上代码

    #include <iostream>
    using namespace std;
    int main()
    {
    
        int* test(int,int,int);
        int * result =test(1,2,3);
         cout<<result[0]<<endl<<result[1]<<endl<<result[2]<<endl;
          getchar();
          return 0;
    } 
    
    int * test(int a,int b,int c)
    {
        int* presult =new int[3];
        presult[0] =a;
        presult[1] =b;
        presult[2] = c;
        return presult;
    }

    运行结果:
    1
    2
    3

    可以看到,我们其实定义了一个int类型的指针作为函数test的类型,所以这个函数的返回值也应该是一个int类型的指针,所以在第15行,我们定义了一个presult指针,并让它指向一个三个元素的数组。(在这里,其实我们并没有定义数组,而是使用了动态内存分配的方式)然后将三个形参分别写入到数组里,最后将指针作为函数的返回值返回。显然这个函数的功能是没有意义的,在这里只做演示而已。

    利用指针作为函数的返回值的方式有一个很大的弊端,不管返回几个值,他们的类型都是相同的。所以为了避免这个问题,我还需要另一种方式,利用结构体。

    二. 利用结构体

    还是先上代码:

    #include <iostream>
    using namespace std;
    struct result
    {
        int first;
        double second;
    };
    int main()
    {
         result test(int a,double b);
         result returnvalue =test(1,2.1234);
         cout<<returnvalue.first <<endl<<returnvalue.second<<endl;
          getchar();
          return 0;
    } 
    
    result test(int a,double b)
    {
         struct result ret;
         ret.first  = a;
         ret.second = b;
         return ret;
    }

    运行结果:
    1
    2.1234
    结构体是C语言中的一种允许用户自定义的数据结构,其关键词为struct 。首先,我们定义了一个结构体类型叫result,它里面包含两个成员分别为int类型的first与double类型的second。
    我们可以这样理解结构体类型,定义之后,result与int,double,float等C语言自带的数据类型没有区别,只不过这个result使我们自己定义的而已,更多关于结构体的内容可以参考:
    http://blog.csdn.net/chaipp0607/article/category/6627824
    然后,我们定义的函数test其实就是一个result类型的函数,定义的变量ret和returnvalue 也是result类型的变量,test的返回值当然也是一个result类型的值。我们利用result类型的变量–returnvalue 中的成员,区分开int和double,实现返回值的类型不同。

    最后,虽然语法上允许这样做, 但是考虑到返回值拷贝的关系,最好:

    ①对于大小为1字节、2字节或4字节的struct,可以通过函数来返回。

    ②对于大小不是1字节、2字节或4字节的struct,不要通过函数来返回。

    参考链接:

    1. C++ 利用指针和结构体实现一个函数返回多个值

    2. 【C++】临时变量不能作为函数的返回值?

    3. StackOverFlow: Is it safe to return a struct in C or C++?

  • 相关阅读:
    前端工程师如何打发闲余时光?(转)
    比较好的前端开发工具
    蓝桥历年套题 约数倍数选卡片 博弈
    单调栈求全1(或全0)子矩阵的个数 洛谷P5300与或和 P3400仓鼠窝
    5-15
    2018CCPC桂林站G Greatest Common Divisor
    STL中的BITSET运用
    2018CCPC桂林站JStone Game
    牛客2019湘潭大学程序竞赛
    Combine String HDU
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/13731311.html
Copyright © 2020-2023  润新知