указатели и функции - PullRequest
0 голосов
/ 02 января 2011

как вернуть более одного значения из функции?

Ответы [ 5 ]

5 голосов
/ 02 января 2011

Функция может иметь только одно возвращаемое значение.Вы можете либо упаковать несколько значений в составной тип данных (например, структуру), либо вернуть значения через параметры функции.Конечно, такие параметры должны быть переданы с использованием указателей на память, объявленную вызывающей стороной.

2 голосов
/ 02 января 2011

1

Объявить метод следующим образом foo (char *msg, int *num, int *out1, int *out2); и назовите это так

int i=10;
char c='s';
int out1;
int out2;
foo(&c,&i,&out1,&out2);

Теперь все значения, которые вы присваиваете out1 и out2 в функции, будут доступны после ее возврата.

2

Возвращает структуру, имеющую более одного члена.

1 голос
/ 02 января 2011

Вы не можете вернуть более 1 значения из функции.Но есть способ.Поскольку вы используете C, вы можете использовать указатели.

Пример:

// calling function:
foo(&a, &b);
printf("%d %d", a, b);
// a is now 5 and b is now 10.

// called function:
void foo(int* a, int* b) {
   *a = 5;
   *b = 10;
}
1 голос
/ 02 января 2011

В C обычно это делается с помощью указателей:

int foo(int x, int y, int z, int* out);

Здесь функция возвращает одно значение и использует out для «возврата» другого значения.При вызове этой функции необходимо предоставить параметру out указатель, указывающий на выделенную память.Сама функция, вероятно, будет выглядеть примерно так:

int foo(int x, int y, int z, int* out) {
    /* Do some work */
    *out = some_value;
    return another_value;
}

И, вызывая ее:

int out1, out2;
out1 = foo(a, b, c, &out2);
0 голосов
/ 02 января 2011

Функции могут возвращать массивы или списки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...