przez sieć) lub zapis takich struktur.
Na przykład przyjmując wyrównanie do granicy 4 bajtów, poniższa struktura nie będzie zajmowała 5, lecz 8 bajtów:
struct { char a; /* sizeof(a) = 1 */ int b; /* sizeof(b) = 4 */ } S; /* sizeof(S) = 8 */
Wyrównanie można rozumieć jako dodatkowe pola, niedostępne dla programisty:
struct { char a; char ; /* wyrównanie */ int b; } S;
Czasami wyrównanie pól struktury jest niepożądane, większość kompilatorów umożliwia programiście zmianę lub wyłączenie poprzez dyrektywę #pragma pack, np.:
#pragma pack(push) /* zapamiętaj bieżącą wartość wyrównania */ #pragma pack(1) /* brak wyrównania */ struct { char a; /* sizeof(a) = 1 */ int b; /* sizeof(b) = 4 */ } S; /* sizeof(S) = 5 */ #pragma pack(pop)
Zobacz też: unia
Struktura w języku C++ Struktury w C++ są deklarowane tak jak w C, jednak oprócz pól mogą zawierać także funkcje (tzw. metody) i mogą dziedziczyć z innych klas i struktur.
Struktura różni się w C++ od klasy wyłącznie domniemanym zakresem widoczności jej pól i metod — dla klasy jest to private a dla struktur public. Używanie struktur zamiast klas nie jest jednak dobrą praktyką programowania, gdyż zaciemnia budowę programu.