Przede wszystkim, aby zacytować C11, rozdział §6.8.6.4, returnoświadczenie, ( moje wyróżnienie )
Jeśli wykonywana jest returninstrukcja z wyrażeniem, wartość wyrażenia jest zwracana wywołującemu jako wartość wyrażenia wywołania funkcji.
Zwracanie zmiennej strukturalnej jest możliwe (i poprawne), ponieważ zwracana jest wartość struktury . Jest to podobne do zwracania dowolnego pierwotnego typu danych ( intna przykład zwracania ).
Z drugiej strony, jeśli zwrócisz tablicę , używając funkcji return <array_name>, zwróci ona zasadniczo adres pierwszego elementu tablicy UWAGA , który staje się nieprawidłowy w funkcji wywołującej, jeśli tablica była lokalna dla wywoływanych funkcji. Zatem zwrócenie tablicy w ten sposób nie jest możliwe.
Tak więc, TL; DR , nie ma nic specjalnego w structs, specjalnością są tablice .
UWAGA:
Cytując C11ponownie, rozdział §6.3.2.1, (wyróżnienie moje )
Z wyjątkiem sytuacji, gdy jest to operand sizeofoperatora, _Alignofoperator lub &operator jednoargumentowy lub literał łańcuchowy używany do inicjalizacji tablicy, wyrażenie typu „tablica typu” jest konwertowane na wyrażenie o typie „” wskaźnik do typu „”, który wskazuje na początkowy element obiektu tablicy i nie jest wartością l. […]
union. Co jest specjalnego w związkach zawodowych?