优秀的编程知识分享平台

网站首页 > 技术文章 正文

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

nanyue 2024-08-16 00:43:02 技术文章 5 ℃

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

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

  • 通过使用指针。
  • 通过使用结构。
  • 通过使用数组。

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

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: \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 <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: \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 <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: \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 <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: \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 <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: \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 fucntion将值分配给函数返回的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; 
} 

输出:

The greater number is 8 and the smaller number is 5
最近发表
标签列表