Как вернуть значение в вызывающую функцию без использования оператора return? - PullRequest
0 голосов
/ 18 ноября 2010

Прото-тип функции, например int xxxx (int) или void xxx (int)

Ответы [ 8 ]

5 голосов
/ 18 ноября 2010

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

4 голосов
/ 18 ноября 2010

Два стандартных способа вернуть значения из функций в C - это либо сделать это явно с помощью оператора return, либо использовать параметр указателя и присвоить объекту указатель.

Есть и другие пути, но я не буду вдаваться в них из-за боязни увеличить количество злого кода в мире. Вы должны использовать один из этих двух.

2 голосов
/ 18 ноября 2010

Использовать пропуск по ссылке:

void foo(int* x, int* y) {
 int temp;
 temp = *x;
 x* = *y;
 y* = temp;
}

void main(void) {
 int x = 2, y=4;
 foo(&x, &y);
 printf("Swapped Nums: %d , %d",x,y);
}
1 голос
/ 18 ноября 2010

Как правило, вы предоставляете ссылку на внешнюю переменную для вашей функции.


void foo(int *value)
{
   *value = 123;
}

int main(void)
{
  int my_return_value = 0;
  foo(&my_return_value);
  printf("Value returned from foo is %d", my_return_value);
  return 0;
}

1 голос
/ 18 ноября 2010
  1. У вас может быть глобальная переменная, которой вы присваиваете значение.
  2. Вы можете передать объект, который хранит целое число, и если вы измените его в функции, он тоже изменится в другом месте, поскольку объекты не являются типом значения.

Это также зависит от используемого вами языка программирования.

РЕДАКТИРОВАТЬ: Извините, я не увидел тег C, поэтому игнорируйтемое последнее высказывание

0 голосов
/ 14 мая 2014

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

typedef struct { int a, char b } mystruct;
mystruct * foo()
{
    mystruct * s = (mystruct *) malloc(sizeof(mystruct));
    return s;
}

Не проверено, но должно быть действительным.

0 голосов
/ 18 ноября 2010

int wel ();
int main ()
{
int x;
x = wel ();
printf ("% d \ n", x);
return 0;
}
int wel ()
{
регистрация int tvr asm ("ax");
tvr = 77;
}

Скомпилировано с компилятором GCC на машине с Ubuntu.В Borland-компиляторе другой способ возврата.

0 голосов
/ 18 ноября 2010

Простому ответу дается прототип, подобный первому, который вы должны использовать оператор return, поскольку возвращаемое значение int диктует его.

В принципе, можно сделать что-то ужасное, например, привести указатель на int и передать его в качестве параметра, вернуть его и изменить. Как уже упоминали другие, вы должны быть уверены, что понимаете все последствия этого, и, судя по вашему вопросу, я бы сказал, что вы этого не делаете.

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