Рубрики

Как вернуть несколько значений из функции в C или C ++?

Новые программисты обычно ищут способы вернуть несколько значений из функции. К сожалению, C и C ++ не допускают этого напрямую. Но, к счастью, с небольшим количеством умного программирования мы можем легко достигнуть этого.

Ниже приведены методы для возврата нескольких значений из функции в C:

  1. Используя указатели.
  2. Используя структуры.
  3. Используя массивы.

Пример: рассмотрим пример, в котором задача состоит в том, чтобы найти большее и меньшее из двух разных чисел. Мы могли бы написать несколько функций. Основная проблема заключается в вызове более чем одной функции, поскольку нам нужно возвращать несколько значений и, конечно же, иметь большее количество строк кода для ввода.

  1. Возврат нескольких значений с помощью указателей: передайте аргумент вместе с его адресом и внесите изменения в их значение с помощью указателя. Так что значения будут изменены в исходный аргумент.

    // Модифицированная программа с использованием указателей
    #include <stdio.h>

      
    // добавляем короткое имя для адреса

    void compare(int a, int b, int* add_great, int* add_small)

    {

        if (a > b) {

      

            // а хранится в указанном адресе

            // по переменной указателя * add_great

            *add_great = a;

            *add_small = b;

        }

        else {

            *add_great = b;

            *add_small = a;

        }

    }

      
    // Код драйвера

    int main()

    {

        int great, small, x, y;

      

        printf("Enter two numbers: \n");

        scanf("%d%d", &x, &y);

      

        // последние два аргумента переданы

        // давая адреса мест памяти

        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. Возврат нескольких значений с использованием структур. Поскольку структура является определяемым пользователем типом данных. Идея состоит в том, чтобы определить структуру с двумя целочисленными переменными и сохранить большие и меньшие значения в этой переменной, а затем использовать значения этой структуры.

    // Модифицированная программа с использованием структур
    #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;

    }

      
    // Код драйвера

    int main()

    {

        int x, y;

        Struct result;

      

        printf("Enter two numbers: \n");

        scanf("%d%d", &x, &y);

      

        // последние два аргумента переданы

        // давая адреса мест памяти

        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].

    // Модифицированная программа с использованием массива
    #include <stdio.h>

      
    // Сохраняем больший элемент по 0-му индексу

    void findGreaterSmaller(int a, int b, int arr[])

    {

      

        // Сохраняем больший элемент в

        // 0-й индекс массива

        if (a > b) {

            arr[0] = a;

            arr[1] = b;

        }

        else {

            arr[0] = b;

            arr[1] = a;

        }

    }

      
    // Код драйвера

    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 ++ Only Методы

  1. Возврат нескольких значений Использование ссылок: Мы используем ссылки в C ++ для хранения возвращаемых значений.

    // Модифицированная программа с использованием References в 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;

        }

    }

      
    // Код драйвера

    int main()

    {

        int great, small, x, y;

      

        printf("Enter two numbers: \n");

        scanf("%d%d", &x, &y);

      

        // последние два аргумента переданы

        // давая адреса мест памяти

        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: Идея похожа на структуры. Мы создаем класс с двумя целочисленными переменными и сохраняем большие и меньшие значения в этих переменных, а затем используем значения этой структуры.

    // Модифицированная программа с использованием класса
    #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;

    }

      
    // Код драйвера

    int main()

    {

        int x, y;

        GreaterSmaller result;

      

        printf("Enter two numbers: \n");

        scanf("%d%d", &x, &y);

      

        // последние два аргумента переданы

        // давая адреса мест памяти

        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: Идея похожа на структуры. Мы создаем кортеж с двумя целочисленными переменными и возвращаем кортеж, а затем внутри основной функции используем функцию связи для назначения значений min и max, возвращаемых функцией.

    // Модифицированная программа с использованием кортежа C ++ STL
    #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);

        }

    }

      
    // Код драйвера

    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;

    }

      
    // Эта статья предоставлена Blinkii

    Выход:

    The greater number is 8 and the smaller number is 5
    

Рекомендуемые посты:

Как вернуть несколько значений из функции в C или C ++?

0.00 (0%) 0 votes