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

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

null

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

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

例子: 考虑一个例子,任务是找到两个不同的数字的越来越小。我们可以编写多个函数。主要的问题是调用多个函数很麻烦,因为我们需要返回多个值,当然,还要输入更多的代码行。

  1. 使用指针返回多个值: 将参数与地址一起传递,并使用指针更改其值。这样这些值就变成了原始参数。

    // Modified program using pointers
    #include <stdio.h>
    // 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: " );
    scanf ( "%d%d" , &x, &y);
    // The last two arguments are passed
    // by giving addresses of memory locations
    compare(x, y, &great, &small);
    printf ( "The 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 <stdio.h>
    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: " );
    scanf ( "%d%d" , &x, &y);
    // The last two arguments are passed
    // by giving addresses of memory locations
    result = findGreaterSmaller(x, y);
    printf ( "The 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 <stdio.h>
    // 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: " );
    scanf ( "%d%d" , &x, &y);
    findGreaterSmaller(x, y, arr);
    printf ( "The 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 <stdio.h>
    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: " );
    scanf ( "%d%d" , &x, &y);
    // The last two arguments are passed
    // by giving addresses of memory locations
    compare(x, y, great, small);
    printf ( "The 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 class
    #include <stdio.h>
    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: " );
    scanf ( "%d%d" , &x, &y);
    // The last two arguments are passed
    // by giving addresses of memory locations
    result = findGreaterSmaller(x, y);
    printf ( "The 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<iostream>
    #include<tuple>
    using namespace std;
    tuple < int , int > 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
    

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享