Wat is Struct (C-structuur)?
Een mechanisme in C dat meerdere waarden (members), mogelijk van verschillende typen, samenvoegt tot één type. Een struct wordt gedefinieerd zoals in struct sensor { int id; float value; }; de members van een variabele s worden gebruikt als s.id, en via een pointer p naar een struct als p->id. De members liggen in de volgorde van declaratie in het geheugen, maar voor de uitlijning kan er opvulling (padding) tussen worden ingevoegd, zodat het geheel groter kan zijn dan de som van de groottes van de members.
Japanse benaming: 構造体
“Struct (C-structuur)” komt voor in 11 oefenvragen uit 7 onderwerpen, bijv. Instructieset en assembly, Basis van programmeren in C, Geheugenhiërarchie en prestaties.
Vakgebied: Basis van programmeren in C
Indeling in het geheugen
Members worden in de volgorde van declaratie geplaatst, van lagere adressen naar hogere. Vóór een type dat uitgelijnd moet worden, zoals een int van 4 bytes op een grens van 4 bytes, wordt opvulling (padding) ingevoegd, en de grootte van de hele struct wordt naar boven afgerond op een veelvoud van de strengste uitlijning. Een struct met char, int en char in die volgorde neemt daardoor in een gebruikelijke omgeving met een int van 4 bytes 12 bytes in, en door de int vooraan te zetten, daalt dat tot 8 bytes.
Veelgestelde vragen
Wat is het verschil tussen een struct en een array?
Een array zet elementen van hetzelfde type achter elkaar, die met een index worden gekozen. Een struct voegt members van mogelijk verschillende typen samen, die met hun naam worden gekozen. De twee worden vaak gecombineerd, zoals in een array van structs of een struct met een array als member.
Waarom moet de grootte van een struct met sizeof worden gecontroleerd?
Hoeveel padding er tussen en na de members komt, hangt af van de groottes van de typen en de regels voor uitlijning (de ABI), dus het optellen van de groottes van de members geeft niet de juiste grootte. Bij het reserveren van een struct met malloc of het wegschrijven naar een bestand wordt de werkelijke grootte bepaald met sizeof(struct naam).