Структура может быть передана функции как параметр. При этом на стеке в кадре вызываемой функции размещаются значения всех элементов структуры, а затем они ставятся в соответствие формальному параметру.
Функция может возвращать структурное значение.
В языке Си реализована операция копирования структур — присваивание значений элементов одной структуры элементам другой структуры того же типа при помощи операции присваивания. Первые компиляторы Си не обеспечивали этой возможности.
В прим. 1 показано, как в функцию передается структура и как функция возвращает структурное значение.
Пример 1
#include <stdio.h>
#include "emp.h"        /* содержит шаблон структуры emp */
int main()
{
   struct emp prgmr, raise(struct emp, double);
   ...
   printf("Old salary: %.2f\n", prgmr.salary);
   prgmr = raise(prgmr, .12);
   printf("New salary: %.2f\n", prgmr.salary);
}
struct emp raise(struct emp person, double increase)
{
  person.salary *= (1+ increase);
  return person;
}
Данная программа выполнялась бы более эффективно, если в функцию raise() передавался указатель на структуру. В этом случае при передаче управления в функцию передается лишь значение указателя, что делает доступными в функции элементы структуры. Этот вариант программы показан в прим. 2.
Пример 2
#include <stdio.h>
#include "emp.h" /* содержит шаблон структуры emp */
int main()
{
   struct emp prgmr;
   void raise(struct emp *, double);
   ...
   printf("Old salary: %.2f\n", prgmr.salary);
   raise(&prgmr, .12);
   printf("New salary: %.2f\n", prgmr.salary);
}
void raise(struct emp *person, double increase)
{
person->salary *= (1+ increase);
}