Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

Varijabilni argumenti funkcija
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
patakenjac
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 23. 10. 2011. (17:34:05)
Postovi: (2F)16
Sarma = la pohva - posuda
= 3 - 3

PostPostano: 19:12 uto, 17. 1. 2012    Naslov: Varijabilni argumenti funkcija Citirajte i odgovorite

Moze li mi netko objasniti koja je razlika izmedu *a i &a, odnosno znam da &a bi trebalo pokazivati na adresu od a, a *a memorijsku lokaciju... Nije li to isto? Uglavnom, ako bi mi netko ukratko mogao objasniti ideju samih varijabilnih argumenata, strasno me to sve buni...
Moze li mi netko objasniti koja je razlika izmedu *a i &a, odnosno znam da &a bi trebalo pokazivati na adresu od a, a *a memorijsku lokaciju... Nije li to isto? Uglavnom, ako bi mi netko ukratko mogao objasniti ideju samih varijabilnih argumenata, strasno me to sve buni...


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 19:44 uto, 17. 1. 2012    Naslov: Citirajte i odgovorite

[code:1]int *x, a;
x = &a; /* u x smo spremili adresu od a */
a = 13; /* a ima vrijednost 13 */
*x = 17; /* memorijska lokacija ciju adresu sadrzi x dobija vrijednost 17 */
printf("%d\n", a); /* ispisuje 17, jer smo tu vrijednost pridijelili prethodnom naredbom */[/code:1]

Varijabla [tt]x[/tt] sadrzi adresu varijable a, pa je [tt]*x[/tt] isto sto i [tt]a[/tt].

Baci oko na crteze u mojoj skripti.
Kod:
int *x, a;
x = &a; /* u x smo spremili adresu od a */
a = 13; /* a ima vrijednost 13 */
*x = 17; /* memorijska lokacija ciju adresu sadrzi x dobija vrijednost 17 */
printf("%d\n", a); /* ispisuje 17, jer smo tu vrijednost pridijelili prethodnom naredbom */


Varijabla x sadrzi adresu varijable a, pa je *x isto sto i a.

Baci oko na crteze u mojoj skripti.



_________________
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.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
pecina
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 01. 2005. (14:15:23)
Postovi: (157)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
62 = 85 - 23
Lokacija: Happily traveling through space since 1986!

PostPostano: 10:41 sri, 18. 1. 2012    Naslov: Citirajte i odgovorite

& ti je [i]address of[/i] operator koji vraća adresu varijable.
* ti je operator dereferenciranja

Zamisli varijablu kao kutiju sa sadržajem. Zamisli da su sve kutije indeksirane i nalaze se u pretincima.

Sad, korištenje kutije x dobivaš sadržaj te kutije. &x ti daje adresu te kutije. To je ujedno i pokazivač na tu kutiju

int x = 5; // ja sam kutija koja sadrži broj 5
int *px = &x; // ja sam kutija koja sadrži adresu varijable x

Kad mijenjaš px, mijenjaš sadržaj te kutije odnosno [i]na što[/i] ona pokazuje. Ako želiš doći do onoga na što ona pokazuje, dereferenciraš varijablu s operatorm *:


int x = 5;
int y = 6;

int *p = &x; // p pokazuje na x

x = 7; // x mijenja vrijednost, p i dalje pokazuje na x
printf("%d", *p); // ispisuje 7

p = &y; // mijenjamo sam pokazivač, vrijednost njegove kutije

*p = 8; // sada je y == 8 jer smo došli do onoga na što pokazuje p
& ti je address of operator koji vraća adresu varijable.
* ti je operator dereferenciranja

Zamisli varijablu kao kutiju sa sadržajem. Zamisli da su sve kutije indeksirane i nalaze se u pretincima.

Sad, korištenje kutije x dobivaš sadržaj te kutije. &x ti daje adresu te kutije. To je ujedno i pokazivač na tu kutiju

int x = 5; // ja sam kutija koja sadrži broj 5
int *px = &x; // ja sam kutija koja sadrži adresu varijable x

Kad mijenjaš px, mijenjaš sadržaj te kutije odnosno na što ona pokazuje. Ako želiš doći do onoga na što ona pokazuje, dereferenciraš varijablu s operatorm *:


int x = 5;
int y = 6;

int *p = &x; // p pokazuje na x

x = 7; // x mijenja vrijednost, p i dalje pokazuje na x
printf("%d", *p); // ispisuje 7

p = &y; // mijenjamo sam pokazivač, vrijednost njegove kutije

*p = 8; // sada je y == 8 jer smo došli do onoga na što pokazuje p



_________________
-- space available for rent --
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Vishykc
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 23. 10. 2010. (14:38:08)
Postovi: (6A)16
Spol: muško
Sarma = la pohva - posuda
= 17 - 12
Lokacija: Zagreb

PostPostano: 10:52 sri, 18. 1. 2012    Naslov: Citirajte i odgovorite

[quote="pecina"]& ti je [i]address of[/i] operator koji vraća adresu varijable.
* ti je operator dereferenciranja

Zamisli varijablu kao kutiju sa sadržajem. Zamisli da su sve kutije indeksirane i nalaze se u pretincima.

Sad, korištenje kutije x dobivaš sadržaj te kutije. &x ti daje adresu te kutije. To je ujedno i pokazivač na tu kutiju

int x = 5; // ja sam kutija koja sadrži broj 5
int *px = &x; // ja sam kutija koja sadrži adresu varijable x

Kad mijenjaš px, mijenjaš sadržaj te kutije odnosno [i]na što[/i] ona pokazuje. Ako želiš doći do onoga na što ona pokazuje, dereferenciraš varijablu s operatorm *:


int x = 5;
int y = 6;

int *p = &x; // p pokazuje na x

x = 7; // x mijenja vrijednost, p i dalje pokazuje na x
printf("%d", *p); // ispisuje 7

p = &y; // mijenjamo sam pokazivač, vrijednost njegove kutije

*p = 8; // sada je y == 8 jer smo došli do onoga na što pokazuje p[/quote]

Lijepo objašnjeno. A koja je razlika između toga kad deklariramo:

int p = &y
int *p = &y
?
pecina (napisa):
& ti je address of operator koji vraća adresu varijable.
* ti je operator dereferenciranja

Zamisli varijablu kao kutiju sa sadržajem. Zamisli da su sve kutije indeksirane i nalaze se u pretincima.

Sad, korištenje kutije x dobivaš sadržaj te kutije. &x ti daje adresu te kutije. To je ujedno i pokazivač na tu kutiju

int x = 5; // ja sam kutija koja sadrži broj 5
int *px = &x; // ja sam kutija koja sadrži adresu varijable x

Kad mijenjaš px, mijenjaš sadržaj te kutije odnosno na što ona pokazuje. Ako želiš doći do onoga na što ona pokazuje, dereferenciraš varijablu s operatorm *:


int x = 5;
int y = 6;

int *p = &x; // p pokazuje na x

x = 7; // x mijenja vrijednost, p i dalje pokazuje na x
printf("%d", *p); // ispisuje 7

p = &y; // mijenjamo sam pokazivač, vrijednost njegove kutije

*p = 8; // sada je y == 8 jer smo došli do onoga na što pokazuje p


Lijepo objašnjeno. A koja je razlika između toga kad deklariramo:

int p = &y
int *p = &y
?



_________________
U matematici se sve smije, osim pogriješiti!
[Vrh]
Korisnički profil Pošaljite privatnu poruku
pecina
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 01. 2005. (14:15:23)
Postovi: (157)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
62 = 85 - 23
Lokacija: Happily traveling through space since 1986!

PostPostano: 10:55 sri, 18. 1. 2012    Naslov: Citirajte i odgovorite

Ovo prvo ne radi jer je lijeva strana int, a desna strana int* i to su nekompatibilni tipovi.

L = D

Ili je tip s desne strane jednak tipu s lijeve (int u int), ili postoji konverzija (float u int).
Ovo prvo ne radi jer je lijeva strana int, a desna strana int* i to su nekompatibilni tipovi.

L = D

Ili je tip s desne strane jednak tipu s lijeve (int u int), ili postoji konverzija (float u int).



_________________
-- space available for rent --
[Vrh]
Korisnički profil Pošaljite privatnu poruku
anmazann
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 01. 11. 2011. (11:49:23)
Postovi: (4)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
= 1 - 0

PostPostano: 16:28 sri, 18. 1. 2012    Naslov: Citirajte i odgovorite

Čini mi se da koliko toliko kužim pointere, ali sad... rješavam zadatke 10.2.5 i 10.2.6 iz skripte te mi nikako ne uspijeva da shvatim kako da vratim vrijednost izračunatu u funkciji u glavni program. Može barem hint kako se to riješava.. Hvala! :)


(evo, na kraju sam ipak shvatila u čemu sam griješila) :)
Čini mi se da koliko toliko kužim pointere, ali sad... rješavam zadatke 10.2.5 i 10.2.6 iz skripte te mi nikako ne uspijeva da shvatim kako da vratim vrijednost izračunatu u funkciji u glavni program. Može barem hint kako se to riješava.. Hvala! Smile


(evo, na kraju sam ipak shvatila u čemu sam griješila) Smile


[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
slonic~tonic
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 26. 10. 2011. (14:16:34)
Postovi: (84)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 4

PostPostano: 20:57 sri, 18. 1. 2012    Naslov: Citirajte i odgovorite

moze dodatno objasnjenje za ovaj zadatak ??
nikako ga ne mogu shvatiti uz ponudeno objasnjenje.. :oops:

Zadatak 10.2.3. Napisite funkciju koja preko varijabilnog parametra ponistava pokazivac na cijeli broj, tj. postavlja ga na vrijednost NULL.

Rjesenje.
Princip je isti kao i do sada, ali sintaksa moze djelovati zbunjujuce. Ovdje
zelimo mijenjati varijablu koja je tipa int* (pointer na int). To znaci da varijablini parametar mora biti tipa int** (pointer na pointer na int).
1 void nullify (int ∗∗x ) {
2 ∗x = NULL;
3 }
moze dodatno objasnjenje za ovaj zadatak ??
nikako ga ne mogu shvatiti uz ponudeno objasnjenje.. Embarassed

Zadatak 10.2.3. Napisite funkciju koja preko varijabilnog parametra ponistava pokazivac na cijeli broj, tj. postavlja ga na vrijednost NULL.

Rjesenje.
Princip je isti kao i do sada, ali sintaksa moze djelovati zbunjujuce. Ovdje
zelimo mijenjati varijablu koja je tipa int* (pointer na int). To znaci da varijablini parametar mora biti tipa int** (pointer na pointer na int).
1 void nullify (int ∗∗x ) {
2 ∗x = NULL;
3 }



_________________
Lakše je naučiti matematiku nego raditi bez nje.
[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 1:07 čet, 19. 1. 2012    Naslov: Citirajte i odgovorite

Ako ti je jasno kako radi za [tt]int[/tt], onda ovdje primijeni to isto na tip [tt]int*[/tt]. Sve isto, samo umjesto [tt]int[/tt] i [tt]*x = 17;[/tt] (i slicne naredbe) pises [tt]int*[/tt] i [tt]x* = NULL;[/tt] (dakle, pridruzujes adresu, a ne broj). Analogno tome, u headeru funkcije [tt]int*[/tt] postaje [tt]int**[/tt].
Ako ti je jasno kako radi za int, onda ovdje primijeni to isto na tip int*. Sve isto, samo umjesto int i *x = 17; (i slicne naredbe) pises int* i x* = NULL; (dakle, pridruzujes adresu, a ne broj). Analogno tome, u headeru funkcije int* postaje int**.



_________________
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.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan