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


Pridružen/a: 29. 11. 2005. (12:24:35) Postovi: (2AD)16
Spol: 
|
|
[Vrh] |
|
C. Smith Forumaš(ica)


Pridružen/a: 15. 06. 2006. (21:29:33) Postovi: (5)16
Spol: 
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 23:05 pet, 16. 6. 2006 Naslov: |
|
|
Postoji nacin za "obicne varijable" (dakle ne za pointere na funkcije):
[code:1]int main() {
char (*b[7])[5];
printf("%d %d %d %d\n", sizeof(b), sizeof(*b), sizeof(**b), sizeof(***b));
}[/code:1]
Ispis: [tt]28 4 5 1[/tt] :)
Znamo da je [tt]sizeof(char) == 1[/tt], pa je [tt]***b[/tt] tipa [tt]char[/tt]. :) Zatim, 5 moze biti samo [tt]sizeof(char[5])[/tt], dok je 4 velicina nekakvog pointera, a 28 == 7 * 4 je niz od 7 pointera. :D
Sve skupa: [tt]b[/tt] je niz od 7 pointera na peteroclani niz charova. 8)
Inace, tako se to i gleda: krenes od objekta koji te zanima, pa uzimas prvo prema desno, a zatim prema lijevo (uz postivanje zagrada):
[tt]char (*b[7])[5];[/tt] :arrow: prvo gledamo zagradu:
:nosmile: [tt]*b[7][/tt] desno je [tt][7][/tt], pa je to [bg=#e0f0ff][b]niz od sedam necega[/b][/bg]; nakon [tt][7][/tt] nema nicega, pa krecemo od [tt]b[/tt] prema lijevo, a to je [tt]*[/tt], sto je [bg=#e0f0ff][b]pointer na ovo sto vec imas[/b][/bg] :arrow:
:nosmile: [bg=#fff0e0][b][tt]*b[7][/tt] je niz od sedam pointera na nesto.[/b][/bg] :D
Sad gledamo izvan zagrade: [tt]char (*b[7])[5];[/tt] :arrow: [tt]char Z[5];[/tt] (pisem [tt]Z[/tt] umjesto [tt](*b[7])[/tt]). Logika je opet ista: prvo desno od [tt]Z[/tt], pa zatim lijevo:
:nosmile: desno je [tt][5][/tt], pa je to [bg=#e0f0ff][b]niz od pet necega[/b][/bg]; nakon [tt][5][/tt] nema nicega, pa krecemo od [tt]Z[/tt] prema lijevo, a to je [tt]*[/tt], sto je [bg=#e0f0ff][b]pointer na ovo sto vec imas[/b][/bg] :arrow:
:nosmile: [bg=#fff0e0][b][tt]char *Z[7][/tt] je niz od pet pointera na [tt]char[/tt].[/b][/bg] :D
Kad "zbrojis" ove sa [bg=#fff0e0]blago narandjastom pozadinom[/bg] dobijes:
:nosmile: [bg=#ffd0d0][b][tt]b[/tt] je niz od sedam pointera na niz od pet pointera na [tt]char[/tt].[/b][/bg] :blista:
Primjeri koje si ti navela su pointeri na funkcije, sto ove godine nismo radili na vjezbama (ne znam za predavanja). :?
Postoji nacin za "obicne varijable" (dakle ne za pointere na funkcije):
Kod: | int main() {
char (*b[7])[5];
printf("%d %d %d %d\n", sizeof(b), sizeof(*b), sizeof(**b), sizeof(***b));
} |
Ispis: 28 4 5 1
Znamo da je sizeof(char) == 1, pa je ***b tipa char. Zatim, 5 moze biti samo sizeof(char[5]), dok je 4 velicina nekakvog pointera, a 28 == 7 * 4 je niz od 7 pointera.
Sve skupa: b je niz od 7 pointera na peteroclani niz charova.
Inace, tako se to i gleda: krenes od objekta koji te zanima, pa uzimas prvo prema desno, a zatim prema lijevo (uz postivanje zagrada):
char (*b[7])[5]; prvo gledamo zagradu:
*b[7] desno je [7], pa je to niz od sedam necega; nakon [7] nema nicega, pa krecemo od b prema lijevo, a to je *, sto je pointer na ovo sto vec imas
*b[7] je niz od sedam pointera na nesto.
Sad gledamo izvan zagrade: char (*b[7])[5]; char Z[5]; (pisem Z umjesto (*b[7])). Logika je opet ista: prvo desno od Z, pa zatim lijevo:
desno je [5], pa je to niz od pet necega; nakon [5] nema nicega, pa krecemo od Z prema lijevo, a to je *, sto je pointer na ovo sto vec imas
char *Z[7] je niz od pet pointera na char.
Kad "zbrojis" ove sa blago narandjastom pozadinom dobijes:
b je niz od sedam pointera na niz od pet pointera na char.
Primjeri koje si ti navela su pointeri na funkcije, sto ove godine nismo radili na vjezbama (ne znam za predavanja).
_________________ 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] |
|
C. Smith Forumaš(ica)


Pridružen/a: 15. 06. 2006. (21:29:33) Postovi: (5)16
Spol: 
|
|
[Vrh] |
|
nana Forumaš(ica)


Pridružen/a: 29. 11. 2005. (12:24:35) Postovi: (2AD)16
Spol: 
|
Postano: 9:52 sub, 17. 6. 2006 Naslov: |
|
|
[quote="vsego"]Logika je opet ista: prvo desno od [tt]Z[/tt], pa zatim lijevo:
:nosmile: desno je [tt][5][/tt], pa je to [bg=#e0f0ff][b]niz od pet necega[/b][/bg]; nakon [tt][5][/tt] nema nicega, pa krecemo od [tt]Z[/tt] prema lijevo, a to je [tt][color=red]*[/color][/tt], sto je [bg=#e0f0ff][b]pointer na ovo sto vec imas[/b][/bg] :arrow:[/quote]
otkud sad ovdje *?
btw na predavanjima smo radili pointere na funkcije.
vsego (napisa): | Logika je opet ista: prvo desno od Z, pa zatim lijevo:
desno je [5], pa je to niz od pet necega; nakon [5] nema nicega, pa krecemo od Z prema lijevo, a to je *, sto je pointer na ovo sto vec imas  |
otkud sad ovdje *?
btw na predavanjima smo radili pointere na funkcije.
_________________ Kad sam bila mala htjela sam biti statističarka
[tex]\omega \in \Omega[/tex] 
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 15:35 sub, 17. 6. 2006 Naslov: |
|
|
[quote="nana"][quote="vsego"]Logika je opet ista: prvo desno od [tt]Z[/tt], pa zatim lijevo:
:nosmile: desno je [tt][5][/tt], pa je to [bg=#e0f0ff][b]niz od pet necega[/b][/bg]; nakon [tt][5][/tt] nema nicega, pa krecemo od [tt]Z[/tt] prema lijevo, a to je [tt][color=red]*[/color][/tt], sto je [bg=#e0f0ff][b]pointer na ovo sto vec imas[/b][/bg] :arrow:[/quote]
otkud sad ovdje *?[/quote]
:oops: Omakla mi se greskica. :oops: Radio sam kao da je pisalo
[tt]char *(*b[7])[5];[/tt]
a ne
[tt]char (*b[7])[5];[/tt]
Htio sam da bude sto vise toga, da mogu bolje objasniti. ;)
Dakle:
Ako imamo [tt]char *(*b[7])[5];[/tt], onda je [tt]b[/tt] niz od sedam pointera na niz od pet pointera na [tt]char[/tt]. 8)
Ako imamo [tt]char (*b[7])[5];[/tt], onda je [tt]b[/tt] niz od sedam pointera na niz od pet [tt]char[/tt]-ova. 8)
Nadam se da sada nisam nista fulao; ipak sam se frisko probudio (izbjegavam vrucine). ;)
nana (napisa): | vsego (napisa): | Logika je opet ista: prvo desno od Z, pa zatim lijevo:
desno je [5], pa je to niz od pet necega; nakon [5] nema nicega, pa krecemo od Z prema lijevo, a to je *, sto je pointer na ovo sto vec imas  |
otkud sad ovdje *? |
Omakla mi se greskica. Radio sam kao da je pisalo
char *(*b[7])[5];
a ne
char (*b[7])[5];
Htio sam da bude sto vise toga, da mogu bolje objasniti.
Dakle:
Ako imamo char *(*b[7])[5];, onda je b niz od sedam pointera na niz od pet pointera na char.
Ako imamo char (*b[7])[5];, onda je b niz od sedam pointera na niz od pet char-ova.
Nadam se da sada nisam nista fulao; ipak sam se frisko probudio (izbjegavam vrucine).
_________________ 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] |
|
nana Forumaš(ica)


Pridružen/a: 29. 11. 2005. (12:24:35) Postovi: (2AD)16
Spol: 
|
|
[Vrh] |
|
fireball Forumaš(ica)


Pridružen/a: 07. 10. 2005. (18:49:17) Postovi: (4AB)16
Spol: 
Lokacija: s rukom u vatri i nogom u grobu
|
|
[Vrh] |
|
Johnny Casino Forumaš(ica)


Pridružen/a: 11. 05. 2003. (17:56:59) Postovi: (10F)16
Spol: 
Lokacija: location, location!
|
Postano: 13:54 ned, 25. 6. 2006 Naslov: |
|
|
Ovo mi se cini kao najprikladnije mjesto za moja (glupa) pitanja:
1.Neka je
typedef struct { int x, y ; } nesto;
nesto *a;
Ne koristeci operator -> pridruzite vrijednost 5 clanu x strukture na koju pokazuje a.
2.Koja od narednih linija deklarira varijablu a kao pointer na niz od 7 pointera na char?
(1) char **a[7];
(2) char (**a)[7];
(3) char *(*a[7]);
(4) char *(*a)[7];
(5) (char *) *a[7];
Cini mi se da je odgovor pod (3), ali bi bilo lijepo kad bi netko te linije 'preveo na hrvatski'. Meni ispadaju cudni 'prijevodi', ali mislim da je samo ovo pitanje prouzrocilo dosta smijeha, pa necu bas pretjerivati...
Ovo mi se cini kao najprikladnije mjesto za moja (glupa) pitanja:
1.Neka je
typedef struct { int x, y ; } nesto;
nesto *a;
Ne koristeci operator → pridruzite vrijednost 5 clanu x strukture na koju pokazuje a.
2.Koja od narednih linija deklarira varijablu a kao pointer na niz od 7 pointera na char?
(1) char **a[7];
(2) char (**a)[7];
(3) char *(*a[7]);
(4) char *(*a)[7];
(5) (char *) *a[7];
Cini mi se da je odgovor pod (3), ali bi bilo lijepo kad bi netko te linije 'preveo na hrvatski'. Meni ispadaju cudni 'prijevodi', ali mislim da je samo ovo pitanje prouzrocilo dosta smijeha, pa necu bas pretjerivati...
_________________ Ima jedan broj, a djeljiv je sa pet
U nizu brojeva, djeljivih sa šest.
...
A to je dva, dva, dva do Žitnjaka
|
|
[Vrh] |
|
nana Forumaš(ica)


Pridružen/a: 29. 11. 2005. (12:24:35) Postovi: (2AD)16
Spol: 
|
|
[Vrh] |
|
Johnny Casino Forumaš(ica)


Pridružen/a: 11. 05. 2003. (17:56:59) Postovi: (10F)16
Spol: 
Lokacija: location, location!
|
Postano: 9:04 pon, 26. 6. 2006 Naslov: |
|
|
[quote="nana"]2. Raspisi [u]doslovno[/u] onako kako je vsego rekao. :dance1:
Točan odgovor je 4.[/quote]
Da, ispada (4) :oops:
Ali imam jos nekih nedoumica, ispada li (1) kao i (3), odnosno 'a je niz od 7 pointera na pointer na char'?
1. Kako bi preveo ovo (char *) *a[7]?
2. U cemu je razlika izmedju
int *p[10]; i int* p[10]?
nana (napisa): | 2. Raspisi doslovno onako kako je vsego rekao.
Točan odgovor je 4. |
Da, ispada (4)
Ali imam jos nekih nedoumica, ispada li (1) kao i (3), odnosno 'a je niz od 7 pointera na pointer na char'?
1. Kako bi preveo ovo (char *) *a[7]?
2. U cemu je razlika izmedju
int *p[10]; i int* p[10]?
_________________ Ima jedan broj, a djeljiv je sa pet
U nizu brojeva, djeljivih sa šest.
...
A to je dva, dva, dva do Žitnjaka
|
|
[Vrh] |
|
pecina Forumaš(ica)


Pridružen/a: 19. 01. 2005. (14:15:23) Postovi: (157)16
Spol: 
Lokacija: Happily traveling through space since 1986!
|
Postano: 10:40 pon, 26. 6. 2006 Naslov: |
|
|
[quote="Johnny Casino"]
2. U cemu je razlika izmedju
int *p[10]; i int* p[10]?[/quote]
Tu nikakva, ali ima razlike između [code:1]int *p1[10], p2[10];[/code:1] i [code:1]int* p1[10]. p2[10];[/code:1]
U prvom slučaju je p2 deklariran kao int p2[10], a u drugom kao int *p2[10].
Ako je zvjezdica odmah do int-a, sve varijable su int*, a ako je zvjezdica do varijable, onda su sve varijable int osim onih koje eksplicitno stave * prije imena varijable.
Johnny Casino (napisa): |
2. U cemu je razlika izmedju
int *p[10]; i int* p[10]? |
Tu nikakva, ali ima razlike između Kod: | int *p1[10], p2[10]; | i Kod: | int* p1[10]. p2[10]; |
U prvom slučaju je p2 deklariran kao int p2[10], a u drugom kao int *p2[10].
Ako je zvjezdica odmah do int-a, sve varijable su int*, a ako je zvjezdica do varijable, onda su sve varijable int osim onih koje eksplicitno stave * prije imena varijable.
_________________ -- space available for rent --
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 10:52 pon, 26. 6. 2006 Naslov: |
|
|
[quote="pecina"][quote="Johnny Casino"]
2. U cemu je razlika izmedju
int *p[10]; i int* p[10]?[/quote]
Tu nikakva, ali ima razlike između [code:1]int *p1[10], p2[10];[/code:1] i [code:1]int* p1[10]. p2[10];[/code:1]
U prvom slučaju je p2 deklariran kao int p2[10], a u drugom kao int *p2[10].
Ako je zvjezdica odmah do int-a, sve varijable su int*, a ako je zvjezdica do varijable, onda su sve varijable int osim onih koje eksplicitno stave * prije imena varijable.[/quote]
:shock: [size=19][b]NE!!![/b][/size] :tso:
[code:1]vsego@viveka:~$ cat t.c; gcc t.c && ./a.out
main(){
double* x, y;
printf("sizeof(x) = %d, sizeof(y) = %d\n", sizeof(x), sizeof(y));
}
sizeof(x) = 4, sizeof(y) = 8[/code:1]
Kao sto vidis, nisu iste velicine: [tt]x[/tt] je 4 bytea (sto su [tt]int[/tt], [b]pointeri[/b] i sl), a [tt]y[/tt] je 8 byteova sto je [b][tt]double[/tt][/b] (dakle [b]NE[/b] pointer na [tt]double[/tt]) :!:
Svejedno je gdje je zvjezdica i upravo zbog ovakve zablude se preporuca "lijepiti" ju na varijablu, a ne na tip! :prodike:
P.S. Imas srece da dezuram u praktikumu, pa sam "nabasao"... 8)
pecina (napisa): | Johnny Casino (napisa): |
2. U cemu je razlika izmedju
int *p[10]; i int* p[10]? |
Tu nikakva, ali ima razlike između Kod: | int *p1[10], p2[10]; | i Kod: | int* p1[10]. p2[10]; |
U prvom slučaju je p2 deklariran kao int p2[10], a u drugom kao int *p2[10].
Ako je zvjezdica odmah do int-a, sve varijable su int*, a ako je zvjezdica do varijable, onda su sve varijable int osim onih koje eksplicitno stave * prije imena varijable. |
NE!!!
Kod: | vsego@viveka:~$ cat t.c; gcc t.c && ./a.out
main(){
double* x, y;
printf("sizeof(x) = %d, sizeof(y) = %d\n", sizeof(x), sizeof(y));
}
sizeof(x) = 4, sizeof(y) = 8 |
Kao sto vidis, nisu iste velicine: x je 4 bytea (sto su int, pointeri i sl), a y je 8 byteova sto je double (dakle NE pointer na double)
Svejedno je gdje je zvjezdica i upravo zbog ovakve zablude se preporuca "lijepiti" ju na varijablu, a ne na tip!
P.S. Imas srece da dezuram u praktikumu, pa sam "nabasao"...
_________________ 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] |
|
Gost
|
Postano: 11:54 pon, 26. 6. 2006 Naslov: |
|
|
[quote="vsego"][quote="pecina"]
Tu nikakva, ali ima razlike između [code:1]int *p1[10], p2[10];[/code:1] i [code:1]int* p1[10]. p2[10];[/code:1]
U prvom slučaju je p2 deklariran kao int p2[10], a u drugom kao int *p2[10].
Ako je zvjezdica odmah do int-a, sve varijable su int*, a ako je zvjezdica do varijable, onda su sve varijable int osim onih koje eksplicitno stave * prije imena varijable.[/quote]
:shock: [size=19][b]NE!!![/b][/size] :tso:
Kao sto vidis, nisu iste velicine: [tt]x[/tt] je 4 bytea (sto su [tt]int[/tt], [b]pointeri[/b] i sl), a [tt]y[/tt] je 8 byteova sto je [b][tt]double[/tt][/b] (dakle [b]NE[/b] pointer na [tt]double[/tt]) :!:
Svejedno je gdje je zvjezdica i upravo zbog ovakve zablude se preporuca "lijepiti" ju na varijablu, a ne na tip! :prodike:
P.S. Imas srece da dezuram u praktikumu, pa sam "nabasao"... 8)[/quote]
E, moj pećina, čovik bi mislija da ćeš nešto i naučit kad si se još u 8. razredu uvatija Demistificiranog C++ ka pijan plota [size=2](a kad ono ništa)[/size] ;-)
vsego (napisa): | pecina (napisa): |
Tu nikakva, ali ima razlike između Kod: | int *p1[10], p2[10]; | i Kod: | int* p1[10]. p2[10]; |
U prvom slučaju je p2 deklariran kao int p2[10], a u drugom kao int *p2[10].
Ako je zvjezdica odmah do int-a, sve varijable su int*, a ako je zvjezdica do varijable, onda su sve varijable int osim onih koje eksplicitno stave * prije imena varijable. |
NE!!!
Kao sto vidis, nisu iste velicine: x je 4 bytea (sto su int, pointeri i sl), a y je 8 byteova sto je double (dakle NE pointer na double)
Svejedno je gdje je zvjezdica i upravo zbog ovakve zablude se preporuca "lijepiti" ju na varijablu, a ne na tip!
P.S. Imas srece da dezuram u praktikumu, pa sam "nabasao"...  |
E, moj pećina, čovik bi mislija da ćeš nešto i naučit kad si se još u 8. razredu uvatija Demistificiranog C++ ka pijan plota (a kad ono ništa)
|
|
[Vrh] |
|
|