#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);