Определим поудобнее тип, чтобы не писать каждый раз слово struct: typedef struct { int a; int b; }my_str; Имеем структуру типа my_str. Cоздадим экземпляр такой структуры: my_str QWE; К полям экземпляра можно обращаться так: QWE.a=10; или QWE.b=20; Cоздалим указатель на структуру: my_str * pointer; Присвою ему значение: pointer = &QWE; К полям экземпляра можно обращаться через наш указатель: pointer->a = 10; или pointer->b=20; Теперь функции: my_str fun( my_str xxx) - берет копию структуры и возвращает структуру. Вызов: my_str QWE2; QWE2 = fum( QWE ); Функция берет указатель на структуру: my_str fun( my_str * zzz ) - берет указатель на структуру и возвращает структуру. Вызов: QWE = fum( &QWE );