Возврат двух значений одновременно в функцию

Как я могу вернуть два значения целочисленного типа одновременно в одной функции на языке программирования C или мне следует написать две разные функции?

5 ответов

Решение

Вы можете создать struct в котором у вас есть два целых числа и вернуть это struct в результате вашей функции.

На таком языке, как С, вы можете хранить свои данные в struct как это:

struct foo {
 int x;
 int y;
}

Если возвращать их не обязательно, и вы можете согласиться использовать указатели, следует следующий подход:

void your_function(/* some other parameters */ int *ret1, int *ret2) {
    int first_value, second_value;
    // do whatever you want there
    *ret1 = first_value; // first_value is the first value you want to return, quite obvious
    *ret2 = second_value; // still obvious
}

Затем вы можете вызвать его следующим образом:

// somewhere
int r1, r2;
your_function(/* other parameters */ &r1, &r2);
// here you can use "returned" values r1, r2

Две разные функции или передать по ссылочным параметрам.

например

void someFunc(int* outParam1, int* outParam2)
{
    if (outParam1 != NULL) {
        *outParam1 = 42;
    }
    if (outParam2 != NULL) {
        *outParam2= 13;
    }
}

В C функция может возвращать только одно значение. Вы можете передать переменную по адресу в функцию и изменить ее с помощью функции.

#include <stdio.h>

int returnTwoInt(int *var2)
{
    *var2 = 2;
    return 1;
}

int main()
{
    int var2 = 0;
    int var1 = returnTwoInt(&var2);

    printf("%d %d\n", var1, var2);

    return 0;
}

Вы можете использовать любой из способов -

использование struct и вернуться struct variable,

Или же

Сделайте функцию для обработки аргументов с помощью указателей.
бывший

void f1(int *x, int *y){

*x  = 1;
*y  = 2;

 }

int main(int argc, char* argv[]) {
int x,y;
f1(&x, &y);
printf("%d %d",x,y);
return 0;
 }
Другие вопросы по тегам