Указатель на структуру -результат функции
Указатель на структурированную переменную может быть также и результатом функции. В этом случае в операторе return должен быть указатель (адрес) некоторой структурированной переменной, которая будет доступна через него после завершения функции. Чисто технически это не составляет проблем. Но попутно возникает вопрос: а откуда берется эта переменная. Для ответа на него перечислим возможные " источники" :
-переменная не может быть локальной (автоматической) переменной функции, поскольку они уничтожается после выхода из функции;
-функция может возвращать указатель на любую общедоступную глобальную (внешнюю) переменную;
-функция может возвращать указатель на переменную, которая в свою очередь получена функцией через указатель на переменную или массив (то есть передавать переменную " со входа на выход" );
-функция может возвращать указатель на динамическую переменную, создаваемую в процессе работы функции.
В данном примере функция выбирает из массива структурированных переменных и возвращает указатель на переменную, у которой элемент name содержит пустую строку :
man *find(man *p, int n)
{
int i;
for (i=0; i<n; i++)
if (p[i].name[0]=='\0')
return(&p[i]); // или return(p+i);
return(NULL);
}