Функция может возвращать указатель. При этом она должна быть определена и объявлена соответствующим образом. Например, если функция возвращает указатель на целое, ее определение обычно имеет вид:
int *f(void)
{
. . .
}
Кроме того, функция должна быть объявлена в некоторой вызывающей функции или выше всех таких функций по тексту программы.
Пример 1
main ()
{
int *f(void);
...
}
В прим. 1 объявление известно внутри функции main().
Пример 2
int *f(void);
main ()
{
...
}
В прим. 2, подобно внешней переменной, объявление известно всем функциям, расположенным ниже его в исходном тексте программы. Объявление может предваряться ключевым словом extern.
Пример 3
#include "local.h"
main ()
{
...
}
Прим. 6 напоминает, что объявления функций часто находятся в файлах заголовков, область действия этих объявлений такая же, как в прим. 2.
Пример 4
/* main () - передает адрес массива, содержащего город и улицу,
в функцию getstreet(), которая возвращает указатель на улицу*/
#include <stdio.h>
int main ()
{
   char *getstreet (char *);
   static char info[] = "Москва, Арбат";

   printf ("Улица %s\n", getstreet(info));
}
/* Предполагается, что p указывает на строку вида "Город, Улица" */
char *getstreet(char *p)
{
  while ( *p != ',')
    p++;
  return p + 2;
}
Вывод:
Улица Арбат