Strukture
Iz E-študij, proste zakladnice študentskega znanja
Strukture v C-ju so zbirke spremenljivk. Te spremenljivke so lahko različnih tipov in vsaka znotraj strukture mora imeti unikatno ime, ki ga uporabljamo, ko kličemo neko vrednost znotraj strukture. Strukture uporabljamo za združevanje povezanih podatkov v skupine. Struktura lahko vsebuje tudi druge strukture, polja ali kazalce.
Definiranje strukture
Nov tip sturkutre običajno definiramo nekje na začetku datoteke z uporabo typedef stavka. typedef definira in poimenuje nov tip, tako da ga lahko potem uporabljamo v programu. typdef se običajno pojavi tik za #define ali #include stavkom.
Primer definicije strukture:
typedef struct { char ime[64]; char poklic[128]; int starost; } delavec;
Tako definiramo nov tip delavec, spremenljivko tipa delavec pa lahko deklariramo takole.
delavec mat_st;
Torej je deklariranje struktur podobno kot deklariranje spremenljivk tipa int ali float. Ime spremenljivke v tem primeru je mat_st (matična številka), ki ima pripadnike ime, poklic in starost.
Dostopanje do pripadnikov strukture
Vsakega pripadnika strukture lahko uporabimo kot normalno spremenljivko, le da do nje dostopamo malo drugače. Če se vrnemo k zgornjemu primeru, bi do imena dostopali takole:
mat_st.ime
Pri strukturah je torej pika operator, ki nam omogoča, da izberemo pripadnika neke strukture.
Kjer pa pri delu s strukturami uporabljamo kazalce, bi bila ta metoda nekoliko nerodna in ker se to dogaja pogosto, imamo v tem primeru poseben operator ->. Recimo, da je ptr_delavec kazalec na strukturo tipa delavec, torej do imena dostopamo takole:
ptr_delavec -> ime
Podajanje strukture kot argument funkcije
Strukture lahko podajamo kot argumente funkcij kot vsako drugo spremenljivko, le ta to storimo nekoliko drugače. Kjer želimo spremeniti vrednosti pripadnikov strukutre, moramo podati kazalec na to strukturo. To je tako kot podajanje kazalca na argument tipa int, katerega vrednost želimo spremeniti. Če nas zanima samo vrednost enega pripadnika strukture, je verjetno enostavneje, če podamo samo tega pripadnika. Če pa bi radi spremenili vrednost tega pripadnika, moramo podati kazalec nanj. Če kot argument podamo strukturo, je vsak njen pripadnik prekopiran, kar je lahko potratno, če delamo z velikimi strukturami ali pogosto kličemo funkcije. Torej je v takem primeru bolje podajati kazalce na velike strukture. Rečemo tudi, da so strukture value type, kar pomeni da se pri podajanju struktur kot argumentov funkcij po defaultu poda samo njihova vrednost, razen če eksplicitno ne povemo, da podajamo referenco na strukturo.