#include < stdlib.h > double *p1, *p2, *p3; . . . . . . . . p1 = (double*) malloc(100); . . . . . . . . p2 = (double*) calloc (100, sizeof(double)); . . . . . . . . p3 = realloc(p1,200); . . . . . . . . . free(p2); free(p3);
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:
![]() |
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: |
struct point { double x,y,z; }; struct point a, b, *currPoint; . . . . . . . . currPoint = &a; (*currPoint).x = 100.0 (* currPoint).y= 0.0; (*currPoint).z = 200.0; currPoint =&b; currPoint->x = 120.0; /* bolj pregledno */ currPoint-> y = 330.0; currPoint-> z = 0.;
#include < stdio.h > struct oseba{ char ime[15]; int ocena; }; struct oseba *student; int num, i; void vnos(struct oseba *p) { printf("Vpisi ime in oceno:"); scanf("%s %d", p->ime, &p->ocena); } main( int argc, char *argv[ ]) { if(argc<2) exit(1); num = atoi(argv[1]) ; student =(struct oseba*)calloc(num,sizeof(struct oseba)); for(i =0 ;i< num; i++) vnos(&student[i]); . . . . . . . for (i = 0; i< num;i++) printf("%s %d \n", student[i].ime, student[i].ocena); exit(0) }
Drugi podatek v strukturi je tudi kazalec na strukturo enakega tipa. To omogoča povezovanje struktur.
#include < stdio.h > struct oseba { char *ime; struct oseba *oce; } oseba1 = {"Janez", NULL}, oseba2 = {"Mirko", &oseba1}, oseba3 = {"Peter", &oseba2}; struct oseba *ptr; . . . . . ptr = &oseba3; printf("sin je %s \n",ptr->ime); printf("oce je %s \n", ptr->oce->ime); printf("ded je %s \n",ptr->oce ->oce->ime); /********* lahko pa tudi tako.. *********/ ptr = ptr->oce; printf("ded je %s \n", ptr-> oce -> ime);