Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Novi Forumaš(ica)

Pridružen/a: 17. 07. 2007. (12:08:32) Postovi: (11F)16
Spol: 
|
|
[Vrh] |
|
pecina Forumaš(ica)


Pridružen/a: 19. 01. 2005. (14:15:23) Postovi: (157)16
Spol: 
Lokacija: Happily traveling through space since 1986!
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3561)16
Spol: 
Lokacija: /sbin/init
|
Postano: 11:49 ned, 20. 1. 2008 Naslov: |
|
|
Mislim da si krivo shvatio sto muci Novog. :)
Deklaracija
[tt]void fja(int *p)[/tt]
[b]NE[/b] znaci "imas jedan parametar [tt][color=red]*[/color]p[/tt] koji je tipa [tt]int[/tt]", nego "imas jedan parametar [tt]p[/tt] koji je tipa [tt]int*[/tt]". :) Dakle, kao da pise
[tt]void fja(int* p)[/tt]
Dapace, i smijes tako pisati, mada se to ne radi iz drugih razloga. :?
Kad pozoves [tt]fja(&q);[/tt], racunalo ce adresu od [tt]q[/tt] poslati kao parametar funkciji koja ocekuje upravo adresu od [tt]int[/tt] (tj. [tt]int*[/tt]) i tu adresu ce pospremiti u varijablu [tt]p[/tt]. 8)
Jesam li pogodio sto pitas? :D
P.S. Zasto ne pisemo [tt]int* x[/tt]? :-s Simply zato jer bi onda [tt]int* x, y[/tt] (obicna deklaracija varijabli; ne funkcijski argumenti) izgledalo kao da su i [tt]x[/tt] i [tt]y[/tt] pointeri, sto je krivo (samo [tt]x[/tt] je pointer; [tt]y[/tt] je "obicni" [tt]int[/tt]). :)
:idea: Ako ti je tako lakse, smijes pisati i [tt]int * x[/tt] (dakle, razmaci i lijevo i desno od [tt]x[/tt]). :)
Mislim da si krivo shvatio sto muci Novog.
Deklaracija
void fja(int *p)
NE znaci "imas jedan parametar *p koji je tipa int", nego "imas jedan parametar p koji je tipa int*". Dakle, kao da pise
void fja(int* p)
Dapace, i smijes tako pisati, mada se to ne radi iz drugih razloga.
Kad pozoves fja(&q);, racunalo ce adresu od q poslati kao parametar funkciji koja ocekuje upravo adresu od int (tj. int*) i tu adresu ce pospremiti u varijablu p.
Jesam li pogodio sto pitas?
P.S. Zasto ne pisemo int* x? Simply zato jer bi onda int* x, y (obicna deklaracija varijabli; ne funkcijski argumenti) izgledalo kao da su i x i y pointeri, sto je krivo (samo x je pointer; y je "obicni" int).
Ako ti je tako lakse, smijes pisati i int * x (dakle, razmaci i lijevo i desno od x).
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
Novi Forumaš(ica)

Pridružen/a: 17. 07. 2007. (12:08:32) Postovi: (11F)16
Spol: 
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3561)16
Spol: 
Lokacija: /sbin/init
|
Postano: 13:13 ned, 20. 1. 2008 Naslov: |
|
|
Na prvu loptu, i meni je bilo logicnije, ali...
1. Kako bi onda tretirao deklaraciju bez razmaka, i.e. [tt]int*x,y;[/tt]? :-k Je l' kao [tt]int* x, y;[/tt] ili kao [tt]int *x, y;[/tt]? :?
2. Kad bi se razlikovale deklaracije [tt]int* x, y;[/tt] i [tt]int *x, y;[/tt], stvar bi bila ubitacna za debugiranje... :(
Jasno, mozes reci "neka [tt]int *x, y;[/tt] uvijek znaci [i]dva pointera na [tt]int[/tt][/i]", no onda imas slicnu nelogicnost, ali kompliciraniju deklaraciju (ne mozes istom naredbom deklarirati [tt]int[/tt]-ove i pointere na [tt]int[/tt]-ove), a i izraz [tt]int x, *y;[/tt] postaje besmislen (i.e. imas manju expresivnost). :?
Tako da, nakon ponesto godina druzenja sa C-om, moram se sloziti s time da je ovako najbolje (ako se vec ide na implicitnu deklaraciju). :)
Na prvu loptu, i meni je bilo logicnije, ali...
1. Kako bi onda tretirao deklaraciju bez razmaka, i.e. int*x,y;? Je l' kao int* x, y; ili kao int *x, y;?
2. Kad bi se razlikovale deklaracije int* x, y; i int *x, y;, stvar bi bila ubitacna za debugiranje...
Jasno, mozes reci "neka int *x, y; uvijek znaci dva pointera na int", no onda imas slicnu nelogicnost, ali kompliciraniju deklaraciju (ne mozes istom naredbom deklarirati int-ove i pointere na int-ove), a i izraz int x, *y; postaje besmislen (i.e. imas manju expresivnost).
Tako da, nakon ponesto godina druzenja sa C-om, moram se sloziti s time da je ovako najbolje (ako se vec ide na implicitnu deklaraciju).
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
Novi Forumaš(ica)

Pridružen/a: 17. 07. 2007. (12:08:32) Postovi: (11F)16
Spol: 
|
|
[Vrh] |
|
Mad Wilson Forumaš(ica)


Pridružen/a: 29. 05. 2006. (22:51:14) Postovi: (121)16
|
|
[Vrh] |
|
mdoko Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol: 
Lokacija: Heriot-Watt University, Edinburgh
|
Postano: 21:21 ned, 20. 1. 2008 Naslov: |
|
|
Danas se manje vise svi slazu da je nacin deklariranja pointera zbunjujuc, ali sjetite se da to potjece iz vremena kada se je na ekranu moglo prikazati 24 linije, te takvo ponasanje kod deklariranja pointera bilo jako korisno sa stanovista ustede prostora na ekranu.
Danas se tome lako doskoci. Naime, :bow: Bjarne Stroustrup :wob: preporuca da se kao dobar stil programiranja usvoji pravilo da se na jednoj liniji nikada ne deklarira vise od jedne varijable.
Ako se prihvatii gore spomenuti prijedlog, onda se bez mogucnosti zabune mogu pisati deklaracije kao sto je npr. [tt]double* p;[/tt] IMO takve deklaracije su puno citljivije i informativnije, kao sto je puno citljivija deklaracija [tt]int* foo(int* a, int* b);[/tt], nego sto je to [tt]int *foo(int *a, int *b);[/tt]
Danas se manje vise svi slazu da je nacin deklariranja pointera zbunjujuc, ali sjetite se da to potjece iz vremena kada se je na ekranu moglo prikazati 24 linije, te takvo ponasanje kod deklariranja pointera bilo jako korisno sa stanovista ustede prostora na ekranu.
Danas se tome lako doskoci. Naime, Bjarne Stroustrup preporuca da se kao dobar stil programiranja usvoji pravilo da se na jednoj liniji nikada ne deklarira vise od jedne varijable.
Ako se prihvatii gore spomenuti prijedlog, onda se bez mogucnosti zabune mogu pisati deklaracije kao sto je npr. double* p; IMO takve deklaracije su puno citljivije i informativnije, kao sto je puno citljivija deklaracija int* foo(int* a, int* b);, nego sto je to int *foo(int *a, int *b);
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
|