How to return multiple values from a function in C or C++?

15 Jun, 2022
New programmers are usually in the search of ways to return multiple values from a function. Unfortunately, C and C++ do not allow this directly. But fortunately, with a little bit of clever programming, we can easily achieve this. Below are the methods to return multiple values from a function in C:
By using pointers.By using structures.By using Arrays.
By using pointers.
By using structures.
By using Arrays.
Example: Consider an example where the task is to find the greater and smaller of two distinct numbers. We could write multiple functions. The main problem is the trouble of calling more than one functions since we need to return multiple values and of course, having more number of lines of code to be typed.
Returning multiple values Using pointers: Pass the argument with their address and make changes in their value using pointer. So that the values get changed into the original argument. 
Returning multiple values Using pointers: Pass the argument with their address and make changes in their value using pointer. So that the values get changed into the original argument. 
C++
C
// Modified program using pointers#include <iostream>using namespace std; // add is the short name for addressvoid 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 codeint main(){    int great, small, x, y;     cout << "Enter two numbers: \n";    cin >> x >> y;     // The last two arguments are passed    // by giving addresses of memory locations    compare(x, y, &great, &small);    cout << "\nThe greater number is " << great << " and the smaller number is "      << small;     return 0;} // This code is contributed by sarajadhav12052009
// Modified program using pointers#include <stdio.h> // add is the short name for addressvoid 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 codeint 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
Returning multiple values using structures : As the structure is a user-defined datatype. The idea is to define a structure with two integer variables and store the greater and smaller values into those variable, then use the values of that structure. 
Returning multiple values using structures : As the structure is a user-defined datatype. The idea is to define a structure with two integer variables and store the greater and smaller values into those variable, then use the values of that structure. 
C
// 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 codeint 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
Returning multiple values using an array (Works only when returned items are of same types): When an array is passed as an argument then its base address is passed to the function so whatever changes made to the copy of the array, it is changed in the original array. Below is the program to return multiple values using array i.e. store greater value at arr[0] and smaller at arr[1]. 
Returning multiple values using an array (Works only when returned items are of same types): When an array is passed as an argument then its base address is passed to the function so whatever changes made to the copy of the array, it is changed in the original array. Below is the program to return multiple values using array i.e. store greater value at arr[0] and smaller at arr[1]. 
C++
C
// Modified program using array#include <iostream>using namespace std; // Store the greater element at 0th indexvoid 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 codeint main(){    int x, y;    int arr[2];     cout << "Enter two numbers: \n";    cin >> x >> y;     findGreaterSmaller(x, y, arr);     cout << "\nThe greater number is " << arr[0]  << " and the "           "smaller number is " << arr[1];     return 0;} // This code is contributed by sarajadhav12052009
// Modified program using array#include <stdio.h> // Store the greater element at 0th indexvoid 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 codeint 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++ Only Methods
Returning multiple values Using References: We use references in C++ to store returned values. 
Returning multiple values Using References: We use references in C++ to store returned values. 
CPP
// 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 codeint 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
Returning multiple values using Class and Object : The idea is similar to structures. We create a class with two integer variables and store the greater and smaller values into those variable, then use the values of that structure. 
Returning multiple values using Class and Object : The idea is similar to structures. We create a class with two integer variables and store the greater and smaller values into those variable, then use the values of that structure. 
CPP
// 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 codeint 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
Returning multiple values using STL tuple : The idea is similar to structures. We create a tuple with two integer variables and return the tuple, and then inside main function we use tie function to assign values to min and max that is returned by the function. 
Returning multiple values using STL tuple : The idea is similar to structures. We create a tuple with two integer variables and return the tuple, and then inside main function we use tie function to assign values to min and max that is returned by the function. 
CPP
// 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 codeint 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
Blinkii
Akanksha_Rai
sarajadhav12052009
C-Arrays
C-Functions
C-Pointers
C-Structure & Union
CPP-Functions
cpp-pointer
cpp-references
C Language
C Programs
C++
C++ Programs
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Substring in C++
Function Pointer in C
Left Shift and Right Shift Operators in C/C++
Different Methods to Reverse a String in C++
std::string class in C++
Strings in C
Arrow operator -> in C/C++ with Examples
Basics of File Handling in C
UDP Server-Client implementation in C
Header files in C/C++ and its uses