Vous êtes sur la page 1sur 95

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Adresni operator
programski jezik C prua mogu nost c

manipulacije s memorijom ra unala c koriste i adresni operator & moemo saznati c memorijsku lokaciju bilo koje varijable za ispis memorijske lokacije koristimo format %p
double x=0.5; printf("Adresa varijable x: %p\n",&x);

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Adresni operator
programski jezik C prua mogu nost c

manipulacije s memorijom ra unala c koriste i adresni operator & moemo saznati c memorijsku lokaciju bilo koje varijable za ispis memorijske lokacije koristimo format %p
double x=0.5; printf("Adresa varijable x: %p\n",&x);

deklariramo i inicijaliziramo varijablu tipa double

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Adresni operator
programski jezik C prua mogu nost c

manipulacije s memorijom ra unala c koriste i adresni operator & moemo saznati c memorijsku lokaciju bilo koje varijable za ispis memorijske lokacije koristimo format %p
double x=0.5; printf("Adresa varijable x: %p\n",&x);

ispisujemo adresu varijable x

Adresa varijable x: 0xbfb399b8 0x ispred broja ozna ava heksadecimalni c brojevni sustav

Osnove programiranja

pri svakom novom pokretanju programa ispis se

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

mijenja jer ra unalo varijablu ne stavlja uvijek na c isto mjesto u memoriji promotrimo sljede i dio koda c

int z[]={3,5,1,7}; int i; for(i=0;i<4;i++) printf("&z[%d]=%p\n",i,&z[i]);

Osnove programiranja

pri svakom novom pokretanju programa ispis se

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

mijenja jer ra unalo varijablu ne stavlja uvijek na c isto mjesto u memoriji promotrimo sljede i dio koda c

int z[]={3,5,1,7}; int i; for(i=0;i<4;i++) printf("&z[%d]=%p\n",i,&z[i]);

inicijaliziramo cjelobrojno polje od cetiri

elementa

Osnove programiranja

pri svakom novom pokretanju programa ispis se

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

mijenja jer ra unalo varijablu ne stavlja uvijek na c isto mjesto u memoriji promotrimo sljede i dio koda c

int z[]={3,5,1,7}; int i; for(i=0;i<4;i++) printf("&z[%d]=%p\n",i,&z[i]);

deklariramo cjelobrojnu varijablu koja ce sluiti

kao broja c

Osnove programiranja

pri svakom novom pokretanju programa ispis se

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

mijenja jer ra unalo varijablu ne stavlja uvijek na c isto mjesto u memoriji promotrimo sljede i dio koda c

int z[]={3,5,1,7}; int i; for(i=0;i<4;i++) printf("&z[%d]=%p\n",i,&z[i]);

ulazimo u for petlju, broja i=0 c

Osnove programiranja

pri svakom novom pokretanju programa ispis se

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

mijenja jer ra unalo varijablu ne stavlja uvijek na c isto mjesto u memoriji promotrimo sljede i dio koda c

int z[]={3,5,1,7}; int i; for(i=0;i<4;i++) printf("&z[%d]=%p\n",i,&z[i]);

&z[0]=0xbfb941ec

ispisujemo adresu elementa z[0]

Osnove programiranja

pri svakom novom pokretanju programa ispis se

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

mijenja jer ra unalo varijablu ne stavlja uvijek na c isto mjesto u memoriji promotrimo sljede i dio koda c

int z[]={3,5,1,7}; int i; for(i=0;i<4;i++) printf("&z[%d]=%p\n",i,&z[i]);

&z[0]=0xbfb941ec

broja i=1 c

Osnove programiranja

pri svakom novom pokretanju programa ispis se

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

mijenja jer ra unalo varijablu ne stavlja uvijek na c isto mjesto u memoriji promotrimo sljede i dio koda c

int z[]={3,5,1,7}; int i; for(i=0;i<4;i++) printf("&z[%d]=%p\n",i,&z[i]);

&z[0]=0xbfb941ec &z[1]=0xbfb941f0

ispisujemo adresu elementa z[1]

Osnove programiranja

pri svakom novom pokretanju programa ispis se

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

mijenja jer ra unalo varijablu ne stavlja uvijek na c isto mjesto u memoriji promotrimo sljede i dio koda c

int z[]={3,5,1,7}; int i; for(i=0;i<4;i++) printf("&z[%d]=%p\n",i,&z[i]);

&z[0]=0xbfb941ec &z[1]=0xbfb941f0

broja i=2 c

Osnove programiranja

pri svakom novom pokretanju programa ispis se

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

mijenja jer ra unalo varijablu ne stavlja uvijek na c isto mjesto u memoriji promotrimo sljede i dio koda c

int z[]={3,5,1,7}; int i; for(i=0;i<4;i++) printf("&z[%d]=%p\n",i,&z[i]);

&z[0]=0xbfb941ec &z[1]=0xbfb941f0 &z[2]=0xbfb941f4

ispisujemo adresu elementa z[2]

Osnove programiranja

pri svakom novom pokretanju programa ispis se

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

mijenja jer ra unalo varijablu ne stavlja uvijek na c isto mjesto u memoriji promotrimo sljede i dio koda c

int z[]={3,5,1,7}; int i; for(i=0;i<4;i++) printf("&z[%d]=%p\n",i,&z[i]);

&z[0]=0xbfb941ec &z[1]=0xbfb941f0 &z[2]=0xbfb941f4

broja i=3 c

Osnove programiranja

pri svakom novom pokretanju programa ispis se

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

mijenja jer ra unalo varijablu ne stavlja uvijek na c isto mjesto u memoriji promotrimo sljede i dio koda c

int z[]={3,5,1,7}; int i; for(i=0;i<4;i++) printf("&z[%d]=%p\n",i,&z[i]);

&z[0]=0xbfb941ec &z[1]=0xbfb941f0 &z[2]=0xbfb941f4 &z[3]=0xbfb941f8

ispisujemo adresu elementa z[3]

Osnove programiranja

pri svakom novom pokretanju programa ispis se

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

mijenja jer ra unalo varijablu ne stavlja uvijek na c isto mjesto u memoriji promotrimo sljede i dio koda c

int z[]={3,5,1,7}; int i; for(i=0;i<4;i++) printf("&z[%d]=%p\n",i,&z[i]);

&z[0]=0xbfb941ec &z[1]=0xbfb941f0 &z[2]=0xbfb941f4 &z[3]=0xbfb941f8

koristili smo polje s cjelobrojnim elementima cjelobrojna varijabla zauzima 4 byte-a u

memoriji ra unala c stoga su elementi polja z[] udaljeni za 4 byte-a

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Oprez! u ostatku ovih predavanja koristit cemo shematski zapis adresa varijabli adrese cemo, radi jednostavnosti, zapisivati kao male cijele brojeve
c 97 14 15 16 17 18 19

u stvarnosti adresa nije 15, nego neki broj tipa

0xbfb941f0

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Op enita svojstva c pointera


pointer je varijabla koja sadri adresu druge

varijable pointer p pokazuje (points) na varijablu c


c 97 14 15 16 17 18 19 20 p 17 88 89 90 91 92 93 94 95 96 97 21 22 23

Osnove programiranja

pointer deklariramo tako da ispred imena

dodamo *
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

tip_varijable *ime_pointera;

varijablu ime_pointera sada moemo koristiti

kao pointer na neku drugu varijablu tipa tip_varijable Primjeri:


int *a; /*deklaracija pointera na tip int*/ oat *b; /*deklaracija pointera na tip oat*/ double *c; /*deklaracija pointera na tip double*/ char *d; /*deklaracija pointera na tip char*/

Osnove programiranja

pointer deklariramo tako da ispred imena

dodamo *
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

tip_varijable *ime_pointera;

varijablu ime_pointera sada moemo koristiti

kao pointer na neku drugu varijablu tipa tip_varijable Primjeri:


int *a; /*deklaracija pointera na tip int*/ oat *b; /*deklaracija pointera na tip oat*/ double *c; /*deklaracija pointera na tip double*/ char *d; /*deklaracija pointera na tip char*/

varijablu a moemo koristiti kao pointer na neku

drugu varijablu tipa int

Osnove programiranja

pointer deklariramo tako da ispred imena

dodamo *
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

tip_varijable *ime_pointera;

varijablu ime_pointera sada moemo koristiti

kao pointer na neku drugu varijablu tipa tip_varijable Primjeri:


int *a; /*deklaracija pointera na tip int*/ oat *b; /*deklaracija pointera na tip oat*/ double *c; /*deklaracija pointera na tip double*/ char *d; /*deklaracija pointera na tip char*/

varijablu b moemo koristiti kao pointer na neku

drugu varijablu tipa oat

Osnove programiranja

pointer deklariramo tako da ispred imena

dodamo *
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

tip_varijable *ime_pointera;

varijablu ime_pointera sada moemo koristiti

kao pointer na neku drugu varijablu tipa tip_varijable Primjeri:


int *a; /*deklaracija pointera na tip int*/ oat *b; /*deklaracija pointera na tip oat*/ double *c; /*deklaracija pointera na tip double*/ char *d; /*deklaracija pointera na tip char*/

varijablu c moemo koristiti kao pointer na neku

drugu varijablu tipa double

Osnove programiranja

pointer deklariramo tako da ispred imena

dodamo *
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

tip_varijable *ime_pointera;

varijablu ime_pointera sada moemo koristiti

kao pointer na neku drugu varijablu tipa tip_varijable Primjeri:


int *a; /*deklaracija pointera na tip int*/ oat *b; /*deklaracija pointera na tip oat*/ double *c; /*deklaracija pointera na tip double*/ char *d; /*deklaracija pointera na tip char*/

varijablu d moemo koristiti kao pointer na neku

drugu varijablu tipa char

Osnove programiranja

adresu varijable dohva amo pomo u adresnog c c

operatora &
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

int *pa; /*deklaracija pointera pa na tip int*/ int a; /*deklaracija varijable a tipa int*/ pa=&a; /*adresu varijable a smo pridruzili pointeru pa*/

deklariramo pointer pa na cjelobrojnu varijablu deklariramo varijablu a cjelobrojnog tipa pointeru pa pridruujemo adresu varijable a sadraj memorijske lokacije na koju pointer

pokazuje dohva amo operatorom c dereferenciranja * pointer pa pokazuje na varijablu a pa gornjom naredbom varijabli a pridruujemo vrijednost 5

Osnove programiranja

adresu varijable dohva amo pomo u adresnog c c

operatora &
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

int *pa; /*deklaracija pointera pa na tip int*/ int a; /*deklaracija varijable a tipa int*/ pa=&a; /*adresu varijable a smo pridruzili pointeru pa*/

deklariramo pointer pa na cjelobrojnu varijablu deklariramo varijablu a cjelobrojnog tipa pointeru pa pridruujemo adresu varijable a sadraj memorijske lokacije na koju pointer

pokazuje dohva amo operatorom c dereferenciranja * pointer pa pokazuje na varijablu a pa gornjom naredbom varijabli a pridruujemo vrijednost 5

Osnove programiranja

adresu varijable dohva amo pomo u adresnog c c

operatora &
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

int *pa; /*deklaracija pointera pa na tip int*/ int a; /*deklaracija varijable a tipa int*/ pa=&a; /*adresu varijable a smo pridruzili pointeru pa*/

deklariramo pointer pa na cjelobrojnu varijablu deklariramo varijablu a cjelobrojnog tipa pointeru pa pridruujemo adresu varijable a sadraj memorijske lokacije na koju pointer

pokazuje dohva amo operatorom c dereferenciranja * pointer pa pokazuje na varijablu a pa gornjom naredbom varijabli a pridruujemo vrijednost 5

Osnove programiranja

adresu varijable dohva amo pomo u adresnog c c

operatora &
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

int *pa; /*deklaracija pointera pa na tip int*/ int a; /*deklaracija varijable a tipa int*/ pa=&a; /*adresu varijable a smo pridruzili pointeru pa*/

deklariramo pointer pa na cjelobrojnu varijablu deklariramo varijablu a cjelobrojnog tipa pointeru pa pridruujemo adresu varijable a sadraj memorijske lokacije na koju pointer

pokazuje dohva amo operatorom c dereferenciranja * pointer pa pokazuje na varijablu a pa gornjom naredbom varijabli a pridruujemo vrijednost 5

Osnove programiranja

adresu varijable dohva amo pomo u adresnog c c

operatora &
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

int *pa; /*deklaracija pointera pa na tip int*/ int a; /*deklaracija varijable a tipa int*/ pa=&a; /*adresu varijable a smo pridruzili pointeru pa*/

deklariramo pointer pa na cjelobrojnu varijablu deklariramo varijablu a cjelobrojnog tipa pointeru pa pridruujemo adresu varijable a sadraj memorijske lokacije na koju pointer

pokazuje dohva amo operatorom c dereferenciranja *


int *pa=5; /*varijabli na koju pokazuje pa smo pridruzili vrijednost 5*/

pointer pa pokazuje na varijablu a pa gornjom

naredbom varijabli a pridruujemo vrijednost 5

Osnove programiranja

adresu varijable dohva amo pomo u adresnog c c

operatora &
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

int *pa; /*deklaracija pointera pa na tip int*/ int a; /*deklaracija varijable a tipa int*/ pa=&a; /*adresu varijable a smo pridruzili pointeru pa*/

deklariramo pointer pa na cjelobrojnu varijablu deklariramo varijablu a cjelobrojnog tipa pointeru pa pridruujemo adresu varijable a sadraj memorijske lokacije na koju pointer

pokazuje dohva amo operatorom c dereferenciranja *


int *pa=5; /*varijabli na koju pokazuje pa smo pridruzili vrijednost 5*/

pointer pa pokazuje na varijablu a pa gornjom

naredbom varijabli a pridruujemo vrijednost 5

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Oprez!: znak * ima dvije razli ite uloge: c u deklaraciji varijable ozna ava da je varijabla c pokaziva kog tipa c u izvrnim naredabama on predstavlja operator dereferenciranja primjenom operatora dereferenciranja na pointer dohva amo sadraj varijable na koju pointer c pokazuje

Osnove programiranja

Primjer:
int x,y; x=1; y=2; int *ip; ip=&x; y=*ip; *ip=0; y 65 ip

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

x 17

98

deklariramo dvije cjelobrojne varijable: x i y

Osnove programiranja

Primjer:
int x,y; x=1; y=2; int *ip; ip=&x; y=*ip; *ip=0; y 65 ip

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

x 1 17

98

varijabli x pridruujemo vrijednost 1

Osnove programiranja

Primjer:
int x,y; x=1; y=2; int *ip; ip=&x; y=*ip; *ip=0; y 2 65 ip

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

x 1 17

98

varijabli y pridruujemo vrijednost 2

Osnove programiranja

Primjer:
int x,y; x=1; y=2; int *ip; ip=&x; y=*ip; *ip=0; y 2 65 ip 98

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

x 1 17

deklariramo pointer ip na varijablu cjelobrojnog

tipa

Osnove programiranja

Primjer:
int x,y; x=1; y=2; int *ip; ip=&x; y=*ip; *ip=0; y 2 65 ip 17 98

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

x 1 17

pointeru ip pridruujemo adresu varijable x ip pokazuje na varijablu x

Osnove programiranja

Primjer:
int x,y; x=1; y=2; int *ip; ip=&x; y=*ip; *ip=0; y 1 65 ip 17 98

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

x 1 17

varijabli y pridruujemo vrijednost varijable na

koju pokazuje pointer ip ip pokazuje na varijablu x pa varijabli y pridruujemo vrijednost varijable x

Osnove programiranja

Primjer:
int x,y; x=1; y=2; int *ip; ip=&x; y=*ip; *ip=0; y 1 65 ip 17 98

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

x 0 17

varijabli na koju pokazuje pointer ip

pridruujemo vrijednost 0 ip pokazuje na varijablu x pa varijabli x pridruujemo vrijednost 0

Osnove programiranja

vrijednost pointera moemo ispisati koriste i c

format %p
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

int x=1; int *ip; ip=&x; printf("Vrijednost pointera ip:%p\n",ip); printf("Sadrzaj adrese na koju pokazuje ip:%d\n",*ip); printf("Vrijednost varijable x:%d\n",x);

x 1 17

ip

65

Osnove programiranja

vrijednost pointera moemo ispisati koriste i c

format %p
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

int x=1; int *ip; ip=&x; printf("Vrijednost pointera ip:%p\n",ip); printf("Sadrzaj adrese na koju pokazuje ip:%d\n",*ip); printf("Vrijednost varijable x:%d\n",x);

x 1 17

ip 65

Osnove programiranja

vrijednost pointera moemo ispisati koriste i c

format %p
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

int x=1; int *ip; ip=&x; printf("Vrijednost pointera ip:%p\n",ip); printf("Sadrzaj adrese na koju pokazuje ip:%d\n",*ip); printf("Vrijednost varijable x:%d\n",x);

x 1 17

ip 17 65

Osnove programiranja

vrijednost pointera moemo ispisati koriste i c

format %p
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

int x=1; int *ip; ip=&x; printf("Vrijednost pointera ip:%p\n",ip); printf("Sadrzaj adrese na koju pokazuje ip:%d\n",*ip); printf("Vrijednost varijable x:%d\n",x);

x 1 17

ip 17 65

Ispis: Vrijednost pointera ip: 17

Osnove programiranja

vrijednost pointera moemo ispisati koriste i c

format %p
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

int x=1; int *ip; ip=&x; printf("Vrijednost pointera ip:%p\n",ip); printf("Sadrzaj adrese na koju pokazuje ip:%d\n",*ip); printf("Vrijednost varijable x:%d\n",x);

x 1 17

ip 17 65

Ispis: Sadrzaj adrese na koju pokazuje ip: 1

Osnove programiranja

vrijednost pointera moemo ispisati koriste i c

format %p
Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

int x=1; int *ip; ip=&x; printf("Vrijednost pointera ip:%p\n",ip); printf("Sadrzaj adrese na koju pokazuje ip:%d\n",*ip); printf("Vrijednost varijable x:%d\n",x);

x 1 17

ip 17 65

Ispis: Vrijednost varijable x: 1

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Pointeri i polja
polja i pointeri su usko povezani jer varijabla

polja zapravo sadri memorijsku lokaciju prvog elementa polja

int z[3]={13,45,25}; printf("z = :%p\n",z); printf("z[0]= :%d\n",*z);

z[0] 13 16

z[1] 45 20 z 16 98

z[2] 25 24

incijaliziramo polje od 3

elementa varijabla polja sadri adresu prvog elementa polja

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Pointeri i polja
polja i pointeri su usko povezani jer varijabla

polja zapravo sadri memorijsku lokaciju prvog elementa polja

int z[3]={13,45,25}; printf("z = :%p\n",z); printf("z[0]= :%d\n",*z);

z[0] 13 16

z[1] 45 20 z 16 98

z[2] 25 24

ispisujemo adresu prvog

elementa polja z=16

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Pointeri i polja
polja i pointeri su usko povezani jer varijabla

polja zapravo sadri memorijsku lokaciju prvog elementa polja

int z[3]={13,45,25}; printf("z = :%p\n",z); printf("z[0]= :%d\n",*z);

z[0] 13 16

z[1] 45 20 z 16 98

z[2] 25 24

ispisujemo sadraj prvog

elementa polja z[0]=13

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Pointeri kao argument funkcija


u dosadanjim smo primjerima funkcijama

prosljedivali samo vrijednost varijabli problemi koje smo susretali


funkcija nema direktan pristup varijablama iz

dijela programa koji je poziva


funkcija moe vratiti samo jednu vrijednost

eksibilnost u radu s funkcijama moemo

pove ati upotrebom pointera c promotrimo ponovo funkciju koja zamjenjuje vrijednost dviju varijabli

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Pointeri kao argument funkcija


u dosadanjim smo primjerima funkcijama

prosljedivali samo vrijednost varijabli problemi koje smo susretali


funkcija nema direktan pristup varijablama iz

dijela programa koji je poziva


funkcija moe vratiti samo jednu vrijednost

eksibilnost u radu s funkcijama moemo

pove ati upotrebom pointera c promotrimo ponovo funkciju koja zamjenjuje vrijednost dviju varijabli

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Pointeri kao argument funkcija


u dosadanjim smo primjerima funkcijama

prosljedivali samo vrijednost varijabli problemi koje smo susretali


funkcija nema direktan pristup varijablama iz

dijela programa koji je poziva


funkcija moe vratiti samo jednu vrijednost

eksibilnost u radu s funkcijama moemo

pove ati upotrebom pointera c promotrimo ponovo funkciju koja zamjenjuje vrijednost dviju varijabli

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Pointeri kao argument funkcija


u dosadanjim smo primjerima funkcijama

prosljedivali samo vrijednost varijabli problemi koje smo susretali


funkcija nema direktan pristup varijablama iz

dijela programa koji je poziva


funkcija moe vratiti samo jednu vrijednost

eksibilnost u radu s funkcijama moemo

pove ati upotrebom pointera c promotrimo ponovo funkciju koja zamjenjuje vrijednost dviju varijabli

Osnove programiranja

Program bez upotrebe pointera:


void zamijeni(int x,int y) { int tmp; tmp=x; x=y; y=tmp; return; } int main() { int a=5, b=3; zamijeni(a,b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x y tmp -

Varijable u funkciji main a b -

Osnove programiranja

Program bez upotrebe pointera:


void zamijeni(int x,int y) { int tmp; tmp=x; x=y; y=tmp; return; } int main() { int a=5, b=3; zamijeni(a,b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x y tmp -

Varijable u funkciji main a 5 b 3

u glavnom dijelu programa inicijaliziramo dvije

varijable: a=5 i b=3

Osnove programiranja

Program bez upotrebe pointera:


void zamijeni(int x,int y) { int tmp; tmp=x; x=y; y=tmp; return; } int main() { int a=5, b=3; zamijeni(a,b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x 5 y 3 tmp -

Varijable u funkciji main a 5 b 3

vrijednosti varijabli a i b prosljedimo funkciji

zamijeni koja ih kopira u svoje lokalne varijable x iy

Osnove programiranja

Program bez upotrebe pointera:


void zamijeni(int x,int y) { int tmp; tmp=x; x=y; y=tmp; return; } int main() { int a=5, b=3; zamijeni(a,b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x 5 y 3 tmp -

Varijable u funkciji main a 5 b 3

deklariramo lokalnu varijablu tmp u funkciji

zamijeni

Osnove programiranja

Program bez upotrebe pointera:


void zamijeni(int x,int y) { int tmp; tmp=x; x=y; y=tmp; return; } int main() { int a=5, b=3; zamijeni(a,b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x 5 y 3 tmp 5

Varijable u funkciji main a 5 b 3

vrijednost varijable x pridruimo varijabli tmp

Osnove programiranja

Program bez upotrebe pointera:


void zamijeni(int x,int y) { int tmp; tmp=x; x=y; y=tmp; return; } int main() { int a=5, b=3; zamijeni(a,b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x 3 y 3 tmp 5

Varijable u funkciji main a 5 b 3

vrijednost varijable y pridruimo varijabli x

Osnove programiranja

Program bez upotrebe pointera:


void zamijeni(int x,int y) { int tmp; tmp=x; x=y; y=tmp; return; } int main() { int a=5, b=3; zamijeni(a,b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x 3 y 5 tmp 5

Varijable u funkciji main a 5 b 3

vrijednost varijable tmp pridruimo varijabli y zamijenili smo vrijednosti varijabli x i y u funkciji

zamijeni

Osnove programiranja

Program bez upotrebe pointera:


void zamijeni(int x,int y) { int tmp; tmp=x; x=y; y=tmp; return; } int main() { int a=5, b=3; zamijeni(a,b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x 3 y 5 tmp 5

Varijable u funkciji main a 5 b 3

vra amo se u funkciju main c varijable a i b su nepromijenjene

Osnove programiranja

Program sa upotrebom pointera:


void zamijeni(int *x,int *y) { int tmp; tmp=*x; *x=*y; *y=tmp; return; } int main() { int a=5, b=3; zamijeni(&a,&b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x 68 y 97 tmp 34

Varijable u funkciji main a 30 b 40

Osnove programiranja

Program sa upotrebom pointera:


void zamijeni(int *x,int *y) { int tmp; tmp=*x; *x=*y; *y=tmp; return; } int main() { int a=5, b=3; zamijeni(&a,&b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x 68 y 97 tmp 34

Varijable u funkciji main a 5 30 b 3 40

u glavnom dijelu programa inicijaliziramo dvije

varijable: a=5 i b=3

Osnove programiranja

Program sa upotrebom pointera:


void zamijeni(int *x,int *y) { int tmp; tmp=*x; *x=*y; *y=tmp; return; } int main() { int a=5, b=3; zamijeni(&a,&b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x 30 68 y 40 97 tmp 34

Varijable u funkciji main a 5 30 b 3 40

adrese varijabli a i b prosljedimo funkciji zamijeni

Osnove programiranja

Program sa upotrebom pointera:


void zamijeni(int *x,int *y) { int tmp; tmp=*x; *x=*y; *y=tmp; return; } int main() { int a=5, b=3; zamijeni(&a,&b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x 30 68 y 40 97 tmp 34

Varijable u funkciji main a 5 30 b 3 40

deklariramo lokalnu varijablu tmp u funkciji

zamijeni

Osnove programiranja

Program sa upotrebom pointera:


void zamijeni(int *x,int *y) { int tmp; tmp=*x; *x=*y; *y=tmp; return; } int main() { int a=5, b=3; zamijeni(&a,&b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x 30 68 y 40 97 tmp 5 34

Varijable u funkciji main a 5 30 b 3 40

varijabli tmp pridruimo sadraj varijable na koju

pokazuje pointer x (varijabla a u funkciji main)

Osnove programiranja

Program sa upotrebom pointera:


void zamijeni(int *x,int *y) { int tmp; tmp=*x; *x=*y; *y=tmp; return; } int main() { int a=5, b=3; zamijeni(&a,&b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x 30 68 y 40 97 tmp 5 34

Varijable u funkciji main

a b 3 3 30 40 varijabli na koju pokazuje pointer x (varijabla a u funkciji main) pridruimo vrijednost varijable na koju pokazuje pointer y (varijabla b u funkciji main)

Osnove programiranja

Program sa upotrebom pointera:


void zamijeni(int *x,int *y) { int tmp; tmp=*x; *x=*y; *y=tmp; return; } int main() { int a=5, b=3; zamijeni(&a,&b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x 30 68 y 40 97 tmp 5 34

Varijable u funkciji main a 3 30 b 5 40

varijabli na koju pokazuje pointer y (varijabla b u

funkciji main) pridruimo vrijednost varijable tmp

Osnove programiranja

Program sa upotrebom pointera:


void zamijeni(int *x,int *y) { int tmp; tmp=*x; *x=*y; *y=tmp; return; } int main() { int a=5, b=3; zamijeni(&a,&b); return 0; }

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Varijable u funkciji zamijeni x 30 68 y 40 97 tmp 5 34

Varijable u funkciji main a 3 30 b 5 40

vra amo se u funkciju main c vrijednosti u varijablama a i b su zamijenjene

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Passing by value: funkciji prosljedujemo vrijednost varijabli koje se kopiraju u lokalne varijable funkcije funkcija nema pristup varijablama u dijelu programa koji je poziva Passing by reference: funkciji prosljedujemo adrese varijabli funkcija sada ima puni pristup varijablama u dijelu programa koji je poziva

Osnove programiranja

promotrimo sada problem funkcije koja treba

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

vratiti vie od jedne vrijednosti funkcija split kao argument uzima realni broj i vra a njegov cijeli i decimalni dio c return naredbom moemo vratiti ili cijeli ili decimalni dio, ali ne oba istovremeno problem rjeavamo tako da funkciji split prosljedujemo adrese dvije varijable iz glavnog dijela programa u memorijske lokacije na tim adresama funkcija upisuje cijeli i decimalni dio argumenta na taj na in cijeli i decimalni dio argumenta c postaju vidljivi i u glavnom dijelu programa

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

void split(double x,int *a,double *b) { int tmp; tmp=(int)x; *a=tmp; *b=x-tmp; return; } int main() { int cijeli; double dec,broj; broj=3.14; split(broj,&cijeli,&dec); return 0; }

Varijable u funkciji split x 3-14 68 tmp 34

Varijable u funkciji main broj 3-14 30 cijeli 44 dec 3-14 56

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

void split(double x,int *a,double *b) { int tmp; tmp=(int)x; *a=tmp; *b=x-tmp; return; } int main() { int cijeli; double dec,broj; broj=3.14; split(broj,&cijeli,&dec); return 0; }

Varijable u funkciji split x 3-14 68 tmp 34

Varijable u funkciji main broj 3.14 30 cijeli 44 dec 3-14 56

u funkciji main deklariramo jednu cjelobrojnu i

dvije realne varijable

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

void split(double x,int *a,double *b) { int tmp; tmp=(int)x; *a=tmp; *b=x-tmp; return; } int main() { int cijeli; double dec,broj; broj=3.14; split(broj,&cijeli,&dec); return 0; }

Varijable u funkciji split x 3.14 68 tmp 34

Varijable u funkciji main broj 3.14 30 cijeli 44 dec 3-14 56

varijabli broj pridruimo vrijednost 3.14

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

void split(double x,int *a,double *b) { int tmp; tmp=(int)x; *a=tmp; *b=x-tmp; return; } int main() { int cijeli; double dec,broj; broj=3.14; split(broj,&cijeli,&dec); return 0; }

Varijable u funkciji split x 3.14 68 tmp 34

Varijable u funkciji main broj 3.14 30 cijeli 44 dec 3-14 56

funkciji split prosljedimo vrijednost varijable broj

koja se kopira u lokalnu varijablu x i adrese varijabli cijeli i dec

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

void split(double x,int *a,double *b) { int tmp; tmp=(int)x; *a=tmp; *b=x-tmp; return; } int main() { int cijeli; double dec,broj; broj=3.14; split(broj,&cijeli,&dec); return 0; }

Varijable u funkciji split x 3.14 68 tmp 3 34

Varijable u funkciji main broj 3.14 30 cijeli 44 dec 3-14 56

deklariramo lokalnu cjelobrojnu varijablu tmp

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

void split(double x,int *a,double *b) { int tmp; tmp=(int)x; *a=tmp; *b=x-tmp; return; } int main() { int cijeli; double dec,broj; broj=3.14; split(broj,&cijeli,&dec); return 0; }

Varijable u funkciji split x 3.14 68 tmp 3 34

Varijable u funkciji main broj 3.14 30 cijeli 3 44 dec 3-14 56

varijabli tmp cast operatorom pridruimo cijeli

dio varijable x

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

void split(double x,int *a,double *b) { int tmp; tmp=(int)x; *a=tmp; *b=x-tmp; return; } int main() { int cijeli; double dec,broj; broj=3.14; split(broj,&cijeli,&dec); return 0; }

Varijable u funkciji split x 3.14 68 tmp 3 34

Varijable u funkciji main broj 3.14 30 cijeli 3 44 dec 0.14 56

varijabli na koju pokazuje pointer a (varijabla

cijeli u funkciji main) pridruimo vrijednost varijable tmp

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

void split(double x,int *a,double *b) { int tmp; tmp=(int)x; *a=tmp; *b=x-tmp; return; } int main() { int cijeli; double dec,broj; broj=3.14; split(broj,&cijeli,&dec); return 0; }

Varijable u funkciji split x 3.14 68 tmp 3 34

Varijable u funkciji main broj 3.14 30 cijeli 3 44 dec 0.14 56

varijabli na koju pokazuje pointer b (varijabla dec

u funkciji main) pridruimo decimalni dio varijable x

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

void split(double x,int *a,double *b) { int tmp; tmp=(int)x; *a=tmp; *b=x-tmp; return; } int main() { int cijeli; double dec,broj; broj=3.14; split(broj,&cijeli,&dec); return 0; }

Varijable u funkciji split x 3.14 68 tmp 3 34

Varijable u funkciji main

vra amo se u funkciju main c varijabla cijeli sadri cijeli dio varijable broj, dok

varijabla dec sadri njegov decimalni dio

Osnove programiranja

vratimo se sada funkciji scanf da bi funkcija mogla u itati vrijednost u varijablu c

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

iz dijela programa koji je poziva, moramo joj prosljediti adresu te varijable zato ispred varijable u funkciji scanf moramo upotrijebiti adresni operator & ako elimo u itati vrijednost u cjelobrojnu c varijablu var, funkciji scanf moramo prosljediti adresu te varijable
scanf("%d",&var);

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Pointer na funkciju
pointer na funkciju deklariramo na sljede i na in c c
tip_rez(*ime)(tip_1 arg_1, tip_2 arg_2,. . . ,tip_n arg_n);

promotrimo primjer funkcije koja kao argument

uzima jednu varijablu tipa double, a kao rezultat vra a vrijednost tipa double c pointer na takav tip funkcije deklariramo ovako
double(*fp)(double x);

fp jo ne pokazuje ni na jednu odredenu funkciju pridruimo pointeru fp adresu funkcije sin


fp=&sin;

sada ravnopravno moemo koristiti fp i sin

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

#include<stdio.h> double kvad(double x) { return x*x; } int main() { double(*pkvad)(double x); pkvad=&kvad; printf("kvad(2.0)=%lf\n",kvad(2.0)); printf("pkvad(2.0)=%lf\n",pkvad(2.0)); return 0; }

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

#include<stdio.h> double kvad(double x) { return x*x; } int main() { double(*pkvad)(double x); pkvad=&kvad; printf("kvad(2.0)=%lf\n",kvad(2.0)); printf("pkvad(2.0)=%lf\n",pkvad(2.0)); return 0; }

fukcija kvad tipa double kao argument uzima

varijablu x tipa double i vra a njezin kvadrat c

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

#include<stdio.h> double kvad(double x) { return x*x; } int main() { double(*pkvad)(double x); pkvad=&kvad; printf("kvad(2.0)=%lf\n",kvad(2.0)); printf("pkvad(2.0)=%lf\n",pkvad(2.0)); return 0; }

deklariramo pointer pkvad na funkciju tipa

double koja kao argument uzima jednu varijablu tipa double u ovom trenutku pkvad jo ne pokazuje na neku odredenu funkciju

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

#include<stdio.h> double kvad(double x) { return x*x; } int main() { double(*pkvad)(double x); pkvad=&kvad; printf("kvad(2.0)=%lf\n",kvad(2.0)); printf("pkvad(2.0)=%lf\n",pkvad(2.0)); return 0; }

pointeru pkvad pridruujemo adresu funkcije

kvad

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

#include<stdio.h> double kvad(double x) { return x*x; } int main() { double(*pkvad)(double x); pkvad=&kvad; printf("kvad(2.0)=%lf\n",kvad(2.0)); printf("pkvad(2.0)=%lf\n",pkvad(2.0)); return 0; }

ispis: kvad(2.0)=4.0

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

#include<stdio.h> double kvad(double x) { return x*x; } int main() { double(*pkvad)(double x); pkvad=&kvad; printf("kvad(2.0)=%lf\n",kvad(2.0)); printf("pkvad(2.0)=%lf\n",pkvad(2.0)); return 0; }

ispis: pkvad(2.0)=4.0

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

#include<stdio.h> double kvad(double x) { return x*x; } int main() { double(*pkvad)(double x); pkvad=&kvad; printf("kvad(2.0)=%lf\n",kvad(2.0)); printf("pkvad(2.0)=%lf\n",pkvad(2.0)); return 0; }

nakon to pointeru pkvad pridruimo adresu

funkcije kvad, ravnopravno moemo koristiti fukcije pkvad i kvad

Osnove programiranja

pointere na funkcije naj e e koristimo kad c c

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

nekoj funkciji kao argument trebamo prosljediti neku drugu funkciju promotrimo primjer funkcije koja integrira proizvoljnu funkciju na intervalu [a,b] koristimo (ne odve preciznu) trapeznu formulu c
b

f (x)dx =
a

ba (f (a) + f (b)) 2

u konkretnom primjeru integriramo

trigonometrijske funkcije sin i cos na intervalu [0,1]

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

#include<stdio.h> #include<math.h> double integrator(double a, double b, double (*f)(double)) { return 0.5*(b-a)*((*f)(a)+(*f)(b)); } int main() { double intsin=integrator(0.0,1.0,&sin); double intcos=integrator(0.0,1.0,&cos); printf("Integral funkcije sinus: %lf\n",intsin); printf("Integral funkcije cosinus: %lf\n",intcos); return 0; }

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

#include<stdio.h> #include<math.h> double integrator(double a, double b, double (*f)(double)) { return 0.5*(b-a)*((*f)(a)+(*f)(b)); } int main() { double intsin=integrator(0.0,1.0,&sin); double intcos=integrator(0.0,1.0,&cos); printf("Integral funkcije sinus: %lf\n",intsin); printf("Integral funkcije cosinus: %lf\n",intcos); return 0; }

argumenti funkcije integrator su dvije varijable

tipa double (granice integracije) i pointer na funkciju koju elimo integrirati

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

#include<stdio.h> #include<math.h> double integrator(double a, double b, double (*f)(double)) { return 0.5*(b-a)*((*f)(a)+(*f)(b)); } int main() { double intsin=integrator(0.0,1.0,&sin); double intcos=integrator(0.0,1.0,&cos); printf("Integral funkcije sinus: %lf\n",intsin); printf("Integral funkcije cosinus: %lf\n",intcos); return 0; }

funkcija integrator vra a priblinu vrijednost c

integrala (trapezna formula)

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

#include<stdio.h> #include<math.h> double integrator(double a, double b, double (*f)(double)) { return 0.5*(b-a)*((*f)(a)+(*f)(b)); } int main() { double intsin=integrator(0.0,1.0,&sin); double intcos=integrator(0.0,1.0,&cos); printf("Integral funkcije sinus: %lf\n",intsin); printf("Integral funkcije cosinus: %lf\n",intcos); return 0; }

ra unamo integral funkcije sinus c funkciji integrator prosljedujemo adresu funkcije

sinus (&sin)

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

#include<stdio.h> #include<math.h> double integrator(double a, double b, double (*f)(double)) { return 0.5*(b-a)*((*f)(a)+(*f)(b)); } int main() { double intsin=integrator(0.0,1.0,&sin); double intcos=integrator(0.0,1.0,&cos); printf("Integral funkcije sinus: %lf\n",intsin); printf("Integral funkcije cosinus: %lf\n",intcos); return 0; }

ra unamo integral funkcije cosinus c funkciji integrator prosljedujemo adresu funkcije

cosinus (&cos)

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

#include<stdio.h> #include<math.h> double integrator(double a, double b, double (*f)(double)) { return 0.5*(b-a)*((*f)(a)+(*f)(b)); } int main() { double intsin=integrator(0.0,1.0,&sin); double intcos=integrator(0.0,1.0,&cos); printf("Integral funkcije sinus: %lf\n",intsin); printf("Integral funkcije cosinus: %lf\n",intcos); return 0; }

ispisujemo vrijednost integrala za funkciju sinus

Integral funkcije sinus: 0.420735

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

#include<stdio.h> #include<math.h> double integrator(double a, double b, double (*f)(double)) { return 0.5*(b-a)*((*f)(a)+(*f)(b)); } int main() { double intsin=integrator(0.0,1.0,&sin); double intcos=integrator(0.0,1.0,&cos); printf("Integral funkcije sinus: %lf\n",intsin); printf("Integral funkcije cosinus: %lf\n",intcos); return 0; }

ispisujemo vrijednost integrala za funkciju

cosinus Integral funkcije cosinus: 0.770151

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

NULL pointer
u praksi se cesto susre emo s pojmom NULL c

pointer pointeru nije mogu e pridruiti cjelobrojnu c vrijednost iznimka je 0 koja u programskom jeziku C nije legalna memorijska adresa pointer kojem pridruimo vrijednost 0 ne pokazuje ni na jednu varijablu takav pointer zovemo NULL pointer naj e e kod pridruivanja koristimo simboli ku c c c konstantu NULL (=0) deniranu u biblioteci <stdio.h>

Osnove programiranja

Pointeri
Adresni operator Op enita svojstva c Pointeri i polja Pointeri kao argument funkcija Pointer na funkciju NULL pointer Wild pointer

Wild pointer
pointer koji je deklariran, a nije inicijaliziran ima

proizvoljnu vrijednost zovemo wild pointer takvi pointeri cesto uzrokuju bugove u programu pa ih treba izbjegavati pod svaku cijenu najjednostavnije je svaki pointer pri deklaraciji inicijalizirati na vrijednost 0
int *ip=NULL;

ponekad se wild pointer naziva i dangling pointer

Vous aimerez peut-être aussi