Professional Documents
Culture Documents
Pokazivači
Pokazivači
programiranja
Dinamičko
Pointeri i 1D polja
alociranje
memorije
Pointeri i 1D polja • pointeri i polja su usko vezani
Polje pointera
Pointeri i 2D polja
Funkcije malloc i calloc
• neka su pointer px i polje x istog tipa
Funkcija realloc
Funkcija free • sljedeće dvije naredbe su ekvivalentne
px=&x[0];
px=x;
Dinamičko
alociranje
memorije int x[]={3,5,1};
Pointeri i 1D polja
Polje pointera int i;
Pointeri i 2D polja
Funkcije malloc i calloc
int *px=x;
Funkcija realloc for(i=0;i<3;i++)
Funkcija free
{
printf("x[%d]=%d\n",i,x[i]);
printf("*(px+%d)=%d\n",i,*(px+i));
}
Osnove
programiranja • sljedeći dio koda ilustrira vezu polja i pointera
Dinamičko
alociranje
memorije int x[]={3,5,1};
Pointeri i 1D polja
Polje pointera int i;
Pointeri i 2D polja
Funkcije malloc i calloc
int *px=x;
Funkcija realloc for(i=0;i<3;i++)
Funkcija free
{
printf("x[%d]=%d\n",i,x[i]);
printf("*(px+%d)=%d\n",i,*(px+i));
}
Dinamičko
alociranje
memorije int x[]={3,5,1};
Pointeri i 1D polja
Polje pointera int i;
Pointeri i 2D polja
Funkcije malloc i calloc
int *px=x;
Funkcija realloc for(i=0;i<3;i++)
Funkcija free
{
printf("x[%d]=%d\n",i,x[i]);
printf("*(px+%d)=%d\n",i,*(px+i));
}
Dinamičko
alociranje
memorije int x[]={3,5,1};
Pointeri i 1D polja
Polje pointera int i;
Pointeri i 2D polja
Funkcije malloc i calloc
int *px=x;
Funkcija realloc for(i=0;i<3;i++)
Funkcija free
{
printf("x[%d]=%d\n",i,x[i]);
printf("*(px+%d)=%d\n",i,*(px+i));
}
Dinamičko
alociranje
memorije int x[]={3,5,1};
Pointeri i 1D polja
Polje pointera int i;
Pointeri i 2D polja
Funkcije malloc i calloc
int *px=x;
Funkcija realloc for(i=0;i<3;i++)
Funkcija free
{
printf("x[%d]=%d\n",i,x[i]);
printf("*(px+%d)=%d\n",i,*(px+i));
}
Dinamičko
alociranje
memorije int x[]={3,5,1}; x[0]=3
Pointeri i 1D polja
Polje pointera int i;
Pointeri i 2D polja
Funkcije malloc i calloc
int *px=x;
Funkcija realloc for(i=0;i<3;i++)
Funkcija free
{
printf("x[%d]=%d\n",i,x[i]);
printf("*(px+%d)=%d\n",i,*(px+i));
}
Dinamičko
alociranje
memorije int x[]={3,5,1}; x[0]=3
Pointeri i 1D polja
Polje pointera int i; *px=3
Pointeri i 2D polja
Funkcije malloc i calloc
int *px=x;
Funkcija realloc for(i=0;i<3;i++)
Funkcija free
{
printf("x[%d]=%d\n",i,x[i]);
printf("*(px+%d)=%d\n",i,*(px+i));
}
Dinamičko
alociranje
memorije int x[]={3,5,1}; x[0]=3
Pointeri i 1D polja
Polje pointera int i; *px=3
Pointeri i 2D polja
Funkcije malloc i calloc
int *px=x;
Funkcija realloc for(i=0;i<3;i++)
Funkcija free
{
printf("x[%d]=%d\n",i,x[i]);
printf("*(px+%d)=%d\n",i,*(px+i));
}
• brojač i=1
Osnove
programiranja • sljedeći dio koda ilustrira vezu polja i pointera
Dinamičko
alociranje
memorije int x[]={3,5,1}; x[0]=3
Pointeri i 1D polja
Polje pointera int i; *px=3
Pointeri i 2D polja
Funkcije malloc i calloc
int *px=x; x[1]=5
Funkcija realloc for(i=0;i<3;i++)
Funkcija free
{
printf("x[%d]=%d\n",i,x[i]);
printf("*(px+%d)=%d\n",i,*(px+i));
}
Dinamičko
alociranje
memorije int x[]={3,5,1}; x[0]=3
Pointeri i 1D polja
Polje pointera int i; *px=3
Pointeri i 2D polja
Funkcije malloc i calloc
int *px=x; x[1]=5
Funkcija realloc for(i=0;i<3;i++) *(px+1)=5
Funkcija free
{
printf("x[%d]=%d\n",i,x[i]);
printf("*(px+%d)=%d\n",i,*(px+i));
}
Dinamičko
alociranje
memorije int x[]={3,5,1}; x[0]=3
Pointeri i 1D polja
Polje pointera int i; *px=3
Pointeri i 2D polja
Funkcije malloc i calloc
int *px=x; x[1]=5
Funkcija realloc for(i=0;i<3;i++) *(px+1)=5
Funkcija free
{
printf("x[%d]=%d\n",i,x[i]);
printf("*(px+%d)=%d\n",i,*(px+i));
}
• brojač i=2
Osnove
programiranja • sljedeći dio koda ilustrira vezu polja i pointera
Dinamičko
alociranje
memorije int x[]={3,5,1}; x[0]=3
Pointeri i 1D polja
Polje pointera int i; *px=3
Pointeri i 2D polja
Funkcije malloc i calloc
int *px=x; x[1]=5
Funkcija realloc for(i=0;i<3;i++) *(px+1)=5
Funkcija free
{ x[2]=1
printf("x[%d]=%d\n",i,x[i]);
printf("*(px+%d)=%d\n",i,*(px+i));
}
Dinamičko
alociranje
memorije int x[]={3,5,1}; x[0]=3
Pointeri i 1D polja
Polje pointera int i; *px=3
Pointeri i 2D polja
Funkcije malloc i calloc
int *px=x; x[1]=5
Funkcija realloc for(i=0;i<3;i++) *(px+1)=5
Funkcija free
{ x[2]=1
printf("x[%d]=%d\n",i,x[i]); *(px+2)=1
printf("*(px+%d)=%d\n",i,*(px+i));
}
Dinamičko
Polje pointera
alociranje
memorije
Pointeri i 1D polja • osim varijable pokazivačkog tipa možemo
Polje pointera
Pointeri i 2D polja
Funkcije malloc i calloc
deklarirati i polje varijabli pokazivačkog tipa tj.
Funkcija realloc
Funkcija free
polje pointera
- - -
56 60 64
Osnove
programiranja
Dinamičko
Polje pointera
alociranje
memorije
Pointeri i 1D polja • osim varijable pokazivačkog tipa možemo
Polje pointera
Pointeri i 2D polja
Funkcije malloc i calloc
deklarirati i polje varijabli pokazivačkog tipa tj.
Funkcija realloc
Funkcija free
polje pointera
- - -
56 60 64
Osnove
programiranja
Dinamičko
Polje pointera
alociranje
memorije
Pointeri i 1D polja • osim varijable pokazivačkog tipa možemo
Polje pointera
Pointeri i 2D polja
Funkcije malloc i calloc
deklarirati i polje varijabli pokazivačkog tipa tj.
Funkcija realloc
Funkcija free
polje pointera
- - -
56 60 64
Osnove
programiranja
Dinamičko
Polje pointera
alociranje
memorije
Pointeri i 1D polja • osim varijable pokazivačkog tipa možemo
Polje pointera
Pointeri i 2D polja
Funkcije malloc i calloc
deklarirati i polje varijabli pokazivačkog tipa tj.
Funkcija realloc
Funkcija free
polje pointera
10 - -
56 60 64
Osnove
programiranja
Dinamičko
Polje pointera
alociranje
memorije
Pointeri i 1D polja • osim varijable pokazivačkog tipa možemo
Polje pointera
Pointeri i 2D polja
Funkcije malloc i calloc
deklarirati i polje varijabli pokazivačkog tipa tj.
Funkcija realloc
Funkcija free
polje pointera
10 14 -
56 60 64
Osnove
programiranja
Dinamičko
Polje pointera
alociranje
memorije
Pointeri i 1D polja • osim varijable pokazivačkog tipa možemo
Polje pointera
Pointeri i 2D polja
Funkcije malloc i calloc
deklarirati i polje varijabli pokazivačkog tipa tj.
Funkcija realloc
Funkcija free
polje pointera
10 14 18
56 60 64
Osnove
programiranja
Dinamičko
Pointeri i 2D polja
alociranje
memorije
Pointeri i 1D polja • organizacija "fixed sized" 2D polja A[m][n] u
Polje pointera
Pointeri i 2D polja
Funkcije malloc i calloc
memoriji računala
Funkcija realloc
Funkcija free
A[0][0] A[0][1] A[0][2] A[0][3] A[0][4]
A 13 33 76 45 11
99 92 14 17 18
43 87 44 32 76
60 43 87 44 32 76
60
Dinamičko
Funkcije malloc i calloc
alociranje
memorije
Pointeri i 1D polja • dinamičko alociranje memorije → varijable i polja
Polje pointera
Pointeri i 2D polja
Funkcije malloc i calloc
alociramo za vrijeme izvršavanja programa, a ne
Funkcija realloc
Funkcija free
kao dosada za vrijeme prevod̄enja programa
• koristimo funkcije malloc i calloc deklarirane u
• funkcija malloc kao argument uzima broj
byte-ova koje treba rezervirati za polje, a vraća
pointer na rezervirani blok memorije ili NULL
pointer ako zahtjev za alociranjem nije mogao
biti ispunjen (jer npr. nema dovoljno memorije)
• pointer koji funkcija malloc vraća je generički
(tipa void) pa ga prije upotrebe treba konvertirati
u željeni tip cast operatorom
Osnove
programiranja • sljedeći fragment koda pokazuje kako funkcijom
malloc možemo rezrvirati memoriju za 128
Dinamičko
alociranje
varijabli tipa double
memorije
Pointeri i 1D polja • ne smijemo zaboraviti uključiti biblioteku
Polje pointera
Pointeri i 2D polja <stdlib.h>
Funkcije malloc i calloc
Funkcija realloc
Funkcija free
double *px;
int broj=128;
px=(double*) malloc(broj*sizeof(double));
if(px==NULL){
printf("Memorija nije rezervirana\n");
exit(-1);
}
Osnove
programiranja • sljedeći fragment koda pokazuje kako funkcijom
malloc možemo rezrvirati memoriju za 128
Dinamičko
alociranje
varijabli tipa double
memorije
Pointeri i 1D polja • ne smijemo zaboraviti uključiti biblioteku
Polje pointera
Pointeri i 2D polja <stdlib.h>
Funkcije malloc i calloc
Funkcija realloc
Funkcija free
double *px;
int broj=128;
px=(double*) malloc(broj*sizeof(double));
if(px==NULL){
printf("Memorija nije rezervirana\n");
exit(-1);
}
Dinamičko
Funkcija realloc
alociranje
memorije
Pointeri i 1D polja • funkciju realloc koristimo da bi rezervirali
Polje pointera
Pointeri i 2D polja
Funkcije malloc i calloc
dodatnu memoriju
Funkcija realloc
Funkcija free
• argumenti funkcije realloc su pointer na dosad
rezerviranu memoriju i broj dodatnih byte-ova
koje želimo rezervirati
• u sljedećemo primjeru rezerviramo mjesto za
dodatnih 256 varijabli tipa double
• u praksi bi još morali provjeriti da li je memorija
doista rezervirana
double *px;
int broj=128;
px=(double*)calloc(broj,sizeof(double));
int dodatno=256;
px=realloc(px,dodatno*sizeof(double));
Osnove
programiranja
Dinamičko
Funkcija free
alociranje
memorije
Pointeri i 1D polja • kada nam rezervirana memorija više ne treba
Polje pointera
Pointeri i 2D polja
Funkcije malloc i calloc
moramo je osloboditi
Funkcija realloc
Funkcija free
• koristimo funkciju free deklariranu u
• argument funkcije free je pointer na blok
memorije koji želimo osloboditi
double *px;
int broj=128;
px=(double*)calloc(broj,sizeof(double));
if(px==NULL){
printf("Memorija nije rezervirana\n");
exit(-1);
}
free(px);