📜  如何从C或C++中的函数返回多个值?

📅  最后修改于: 2021-05-28 03:55:15             🧑  作者: Mango

新程序员通常在寻找从函数返回多个值的函数。不幸的是,C和C++不允许直接这样做。但是幸运的是,通过一些巧妙的编程,我们可以轻松实现这一目标。

下面是从C函数中返回多个值的方法:

  1. 通过使用指针。
  2. 通过使用结构。
  3. 通过使用数组。

示例:考虑一个示例,其中的任务是查找两个不同数字中的较大和较小值。我们可以编写多个函数。主要问题是调用多个函数的麻烦,因为我们需要返回多个值,并且当然需要键入更多的代码行。

  1. 使用指针返回多个值:通过参数传递其地址,并使用指针更改其值。这样就可以将值更改为原始参数。
    // Modified program using pointers
    #include 
      
    // add is the short name for address
    void compare(int a, int b, int* add_great, int* add_small)
    {
        if (a > b) {
      
            // a is stored in the address pointed
            // by the pointer variable *add_great
            *add_great = a;
            *add_small = b;
        }
        else {
            *add_great = b;
            *add_small = a;
        }
    }
      
    // Driver code
    int main()
    {
        int great, small, x, y;
      
        printf("Enter two numbers: \n");
        scanf("%d%d", &x, &y);
      
        // The last two arguments are passed
        // by giving addresses of memory locations
        compare(x, y, &great, &small);
        printf("\nThe greater number is %d and the"
               "smaller number is %d",
               great, small);
      
        return 0;
    }
    
    输出:
    Enter two numbers: 
    5 8
    The greater number is 8 and the smaller number is 5
    
  2. 使用结构返回多个值:由于结构是用户定义的数据类型。这个想法是用两个整数变量定义一个结构,并将较大和较小的值存储到这些变量中,然后使用该结构的值。
    // Modified program using structures
    #include 
    struct greaterSmaller {
        int greater, smaller;
    };
      
    typedef struct greaterSmaller Struct;
      
    Struct findGreaterSmaller(int a, int b)
    {
        Struct s;
        if (a > b) {
            s.greater = a;
            s.smaller = b;
        }
        else {
            s.greater = b;
            s.smaller = a;
        }
      
        return s;
    }
      
    // Driver code
    int main()
    {
        int x, y;
        Struct result;
      
        printf("Enter two numbers: \n");
        scanf("%d%d", &x, &y);
      
        // The last two arguments are passed
        // by giving addresses of memory locations
        result = findGreaterSmaller(x, y);
        printf("\nThe greater number is %d and the"
               "smaller number is %d",
               result.greater, result.smaller);
      
        return 0;
    }
    
    输出:
    Enter two numbers: 
    5 8
    The greater number is 8 and the smaller number is 5
    
  3. 使用数组返回多个值(仅当返回的项目具有相同类型时才有效):当将数组作为参数传递时,其基地址将传递给函数,因此,对数组副本所做的任何更改都将在原始数组。
    下面是使用数组返回多个值的程序,即在arr [0]处存储较大的值,在arr [1]中存储较小的值。
    // Modified program using array
    #include 
      
    // Store the greater element at 0th index
    void findGreaterSmaller(int a, int b, int arr[])
    {
      
        // Store the greater element at
        // 0th index of the array
        if (a > b) {
            arr[0] = a;
            arr[1] = b;
        }
        else {
            arr[0] = b;
            arr[1] = a;
        }
    }
      
    // Driver code
    int main()
    {
        int x, y;
        int arr[2];
      
        printf("Enter two numbers: \n");
        scanf("%d%d", &x, &y);
      
        findGreaterSmaller(x, y, arr);
      
        printf("\nThe greater number is %d and the"
               "smaller number is %d",
               arr[0], arr[1]);
      
        return 0;
    }
    
    输出:
    Enter two numbers: 
    5 8
    The greater number is 8 and the smaller number is 5
    

仅C++方法

  1. 使用引用返回多个值:我们在C++中使用引用来存储返回的值。
    // Modified program using References in C++
    #include 
      
    void compare(int a, int b, int &add_great, int &add_small)
    {
        if (a > b) {
            add_great = a;
            add_small = b;
        }
        else {
            add_great = b;
            add_small = a;
        }
    }
      
    // Driver code
    int main()
    {
        int great, small, x, y;
      
        printf("Enter two numbers: \n");
        scanf("%d%d", &x, &y);
      
        // The last two arguments are passed
        // by giving addresses of memory locations
        compare(x, y, great, small);
        printf("\nThe greater number is %d and the"
               "smaller number is %d",
               great, small);
      
        return 0;
    }
    
    输出:
    Enter two numbers: 
    5 8
    The greater number is 8 and the smaller number is 5
    
  2. 使用Class和Object返回多个值:这个想法类似于结构。我们创建一个具有两个整数变量的类,并将较大和较小的值存储到这些变量中,然后使用该结构的值。
    // Modified program using class
    #include 
      
    class GreaterSmaller {
    public:
        int greater, smaller;
    };
      
    GreaterSmaller findGreaterSmaller(int a, int b)
    {
        GreaterSmaller s;
        if (a > b) {
            s.greater = a;
            s.smaller = b;
        }
        else {
            s.greater = b;
            s.smaller = a;
        }
      
        return s;
    }
      
    // Driver code
    int main()
    {
        int x, y;
        GreaterSmaller result;
      
        printf("Enter two numbers: \n");
        scanf("%d%d", &x, &y);
      
        // The last two arguments are passed
        // by giving addresses of memory locations
        result = findGreaterSmaller(x, y);
        printf("\nThe greater number is %d and the"
               "smaller number is %d",
               result.greater, result.smaller);
      
        return 0;
    }
    
    输出:
    Enter two numbers: 
    5 8
    The greater number is 8 and the smaller number is 5
    
  3. 使用STL元组返回多个值:这个想法类似于结构。我们使用两个整数变量创建一个元组并返回该元组,然后在main函数内部,我们使用tie函数将值分配给min和max,该值由该函数返回。
    // Modified program using C++ STL tuple
    #include
    #include
      
    using namespace std;
      
    tuple  findGreaterSmaller(int a, int b)
    {
        if (a < b) {
        return make_tuple(a, b);
        }
        else {
        return make_tuple(b, a);
        }
    }
      
    // Driver code
    int main()
    {
        int x = 5, y= 8;
        int max, min;
        tie(min, max) = findGreaterSmaller(x, y);
      
        printf("The greater number is %d and the "
            "smaller number is %d",
            max, min);
      
        return 0;
    }
      
    // This article is contributed by Blinkii
    
    输出:
    The greater number is 8 and the smaller number is 5
    
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。