Функция, возвращающая несколько значений без использования указателей - PullRequest
1 голос
/ 28 августа 2010

Если я создаю функцию, которая возвращает более 1 значения одной и той же переменной, как в примере:

char *strstr(char *s1,char *s2)
{
 int flag=1;
 char i,j;
 for(i=0;*s1;i++)
 {
  if(s1[i]==s2[0])
  for(j=i;*s2;j++)
  {
   if(s1[j]!=s2[j])
   flag=0;
  }

 }
 return i;
 return 0;
}

Каким будет действительное значение, возвращаемое функцией? Будет ли последнее возвращенное значение перекрывать первое возвращаемое значение?

Ответы [ 2 ]

4 голосов
/ 28 августа 2010

Первое возвращаемое попадание (return i; здесь) будет тем, что фактически возвращается. Хороший компилятор скажет вам, что return 0; является мертвым кодом, поскольку он недоступен (т. Е. Поток управления не может достичь этого оператора).

Если вы не создадите свою собственную структуру кортежа или пары (или какую-либо другую, более семантическую структуру), единственный разумный способ вернуть несколько значений (без использования глобальных переменных или чего-то еще не поддерживаемого) в C - это делать это с указателями в качестве параметров out, хотя вы говорите, что не хотите этого делать.

1 голос
/ 28 августа 2010

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

char * foo() 
{
char *ptr;
ptr=malloc(256);
if(ptr==NULL)
return NULL;   /// First return statement is here 
strcpy(ptr,"Stackoverflow");
return ptr; // This is second return statement.
}

Также это не означает, что оба будут выполнены в одном вызове.Только один возврат выполнен.И функция возвращается к точке вызова.

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