W języku C typ złożony, który grupuje wiele pól (np. liczby, napisy, inne struktury) w jedną logiczną całość, deklaruje się za pomocą słowa kluczowego struct. Taka konstrukcja jest funkcjonalnie zbliżona do "rekordu" (record) spotykanego w Pascalu: oba rozwiązania pozwalają opisać "rekord danych" składający się z nazwanych pól o różnych typach.
Dlaczego poprawne jest "struct"? Ponieważ struct definiuje strukturę, w której każde pole ma własne miejsce w pamięci, a rozmiar struktury jest (w uproszczeniu) sumą rozmiarów pól z uwzględnieniem wyrównań. Dzięki temu można przechowywać naraz komplet informacji, np. dane użytkownika: identyfikator, imię, status, itp.
Dlaczego pozostałe odpowiedzi nie pasują?
- union także grupuje pola, ale wszystkie pola współdzielą ten sam obszar pamięci. W danym momencie sens ma zwykle jedno z nich, więc unia nie odpowiada typowemu "rekordowi", gdzie pola istnieją jednocześnie.
- enum służy do definiowania typu wyliczeniowego, czyli zestawu nazwanych stałych całkowitych (np. stany: START, STOP). To nie jest typ złożony z wielu pól.
- register dotyczy klasy pamięci (wskazówki dla kompilatora co do przechowywania zmiennej) i nie służy do tworzenia nowego typu złożonego.
Wskazówka egzaminacyjna: jeśli w pytaniu pojawia się idea "rekordu danych" lub "wiele pól w jednym typie", w C najczęściej szukasz właśnie struct. Jeśli jest mowa o oszczędzaniu pamięci przez nakładanie pól, rozważ union. Jeśli o stanach/etykietach liczbowych — enum.