Struktura i unia w języku C

Słownik kwalifikacji INF.04 - Projektowanie, programowanie i testowanie aplikacji

W języku C zarówno struct, jak i union służą do tworzenia własnych typów danych złożonych. Różnią się jednak sposobem przechowywania danych w pamięci.

Struktura struct

Struktura przechowuje wszystkie swoje pola jednocześnie. Każde pole ma osobne miejsce w pamięci.

struct Osoba {
    int wiek;
    float wzrost;
    char plec;
};

Obiekt typu struct Osoba może jednocześnie przechowywać wiek, wzrost i płeć.

Rozmiar struktury jest zwykle zbliżony do sumy rozmiarów jej pól, choć może być większy przez wyrównanie pamięci, czyli padding.

Unia union

Unia również może mieć wiele pól, ale wszystkie pola współdzielą to samo miejsce w pamięci. Oznacza to, że w danym momencie poprawnie przechowywana jest tylko jedna wartość.

union Dane {
    int liczba;
    float rzeczywista;
    char znak;
};

Jeśli zapiszesz wartość do pola liczba, a potem do pola rzeczywista, poprzednia wartość zostanie nadpisana, ponieważ pola używają tego samego obszaru pamięci.

Najważniejsza różnica

  • struct przechowuje wiele wartości równocześnie,
  • union przechowuje jedną wartość w danym momencie,
  • struct zwykle zajmuje więcej pamięci,
  • union zajmuje tyle pamięci, ile jej największe pole.

Wskazówka egzaminacyjna

Jeśli w pytaniu pojawia się porównanie struct i union, najczęściej chodzi o pamięć: struktura ma osobne miejsce dla każdego pola, a unia współdzieli jedno miejsce między wszystkimi polami.