Dinamična alokacija pomnilnika


Primeri:

Funkcija malloc ima en sam argument, ki pove, koliko bytov pomnilnika rabimo.

Funkcija calloc ima dva argumenta: prvi pove število elementov, drugi pove velikost posameznega elementa (v bytih), zato uporaba operatorja sizeof().

Oba klica vrneta kazalec tipa "void". Zato praviloma kazalec pretvorimo v pravi tip z operatorjem “cast” (ki je v nasem primeru (double*))

Funkcija realloc spremeni polje, naslovljeno s kazalcem,za definirano število bytov.

Če spomina ni dovolj, vrnejo vse tri funkcije vrednost 0.
 

Sedaj, ko poznamo dinamično alokacijo pomnilnika in kazalce, si lahko ogledamo še nekaj zelo uporabnih primerov:


Kazalci na strukture

 

Primer 1:

 
Definirajmo strukturo point, ki ima kot člene koordinate točke. Imejmo dve taki točki oziroma strukturi: a in b. Imejmo tudi kazalec na tako strukturo. Končno s pomočjo tega kazalca naslavljajmo obe strukturi in nastavimo vrednosti njunih elementov:

 
 

Primer 2:

Program ponazoruje uvod v preprosto "podatkovno bazo". Zapisi v tej bazi so podatki o študentih. Vsak zapis pomnimo v strukturi tipa student, ki jo moramo prej definirati. Program prebere iz komandne vrstice, koliko študentov imamo. Za vsakega moramo dinamično alocirati strukturo. Vpis in izpis podatkov demonstrira naslavljanje teh struktur s kazalcem.

Kazalci v strukturah, povezani seznami

Posamezni členi v strukturah so lahko tudi kazalci na druge strukture. Tako lahko realiziramo cele sezname struktur, povezanih s kazalci.

Primer:

Uvedimo strukturo, ki podaja sorodstvene relacije. Osnovni podatek v vsaki strukturi je ime. Ker so imena običajno različne dolžine, je bolje, če zanje alociramo pomnilnik posebej - dinamično. V strukturi pa imamo kazalec (naslov) na tako pomnjeno ime.

Drugi podatek v strukturi je tudi kazalec na strukturo enakega tipa. To omogoča povezovanje struktur.