C pointeri

poruka: 9
|
čitano: 8.165
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
neaktivan
offline
C pointeri

dakle pošto učim c došo sam i na temu pointeri...surfo sam o njima i malo sam skužio, ali bio bih jako zahvalan ako bi mi netko svojim rječima objasnio šta je to i možda eventualno napisao neki primjer toga...

P.S. Kad budete objašnjavali, govorite laičkim jezikom, dakle što lakše bez nekih previše stručnih izraza nego da i mi obični smrtnici to razumijemo...

thunder in my room :prijevod: Moja mama viče! 92% tinejđera sluša turbo folk. Ako si ti među onih 8% koji još uvijek slušaju pravu glazbu kopiraj si ovo u potpis. Da se Facebook server sruši 90% m
 
0 0 hvala 0
15 godina
offline
RE: C pointeri

ukratko, pointer povezuje dvije mem.adrese, recimo operaciju i vrijednost. Pointer ili point-to, pokazivati na, možemo prevesti kao putokaz ili pokazivač.

-Ali, preduvijet nije laički jezik, zapravo početak učenja s razumijevanjem je da naučiš terminologiju. Moj savijet da koristiš originalne nazive kao pointer umjesto prevedenog pokazivča, jer inače moraš 'razmišljati' na dva jezika. (istina, onda te zbunjuje domaća literatura, kao čigrasto velepamtilo) ;-)

C64/TurboModul-OpenSourceProject.org.cn.部分作品为网上收集整理,供开源爱好者学习使用
15 godina
neaktivan
offline
RE: C pointeri

Zamisli si varijable kao papirice. Kad imas hrpu papira, nekad ti se isplati zapisati na novi papiric gdje se neki drugi papiric nalazi. I taj novi papiric je pointer (pokazivac) - na njemu pise gdje se nalazi onaj "bitan".

U C-u se ti "papirici" rade ovako:

 

int A; // varijabla A

int *B; // pokazivac na varijablu tipa int; na pocetku pokazuje na neodredjeno mjesto u memoriji te se treba "postaviti" -> staviti da na nesto pokazuje

B = &A; // pridruzuje varijabli B adresu od A -> svaka varijabla ima svoju adresu (mjesto) u memoriji koje se ne mijenja. U C-u se ta adresa dobije pisanjem ampersanda (&) ispred varijable. Znaci, u pokazivacu u biti pise adresa od A

*B = 8; // stavlja vrijednost 8 na mjesto gdje pokazuje B ->zvijezdica prije B oznacava da se uzima / mijenja vrijednost na koju pokazivac B pokazuje. Znaci, ova linija je identicna kao A = 8.  <-- EDIT: pisala je glupost, sad je ispravljeno.

 

Nadalje, "nizovi" su isto tako pokazivaci. Recimo

int A[100];

ce napraviti sljedece: rezervirati ce uzastopnih 400 byte-ova u memorija (100 puta po 4 byta za svaki integer). A ce u stvari biti pokazivac na 0 mjesto u tom memorijskom nizu. Stoga ti

*A = 5;

je isto sto i

A[0] = 5;

Zbog toga sto mozes zbrajati pointere (tj. napisati recimo A+1), ti mozes napisati i ovo:

*(A+1) = 5;

Sto ce to napraviti? Hoce li zapisivati od drugog byte-a ili od cetvrtog? Odgovor je od cetvrtog, zato sto je A pokazivac na tip integer - koji ima 4 byte-a - pa ces uvecavanjem A za 1, u biti uvecati ga za 4.  * ispred pokazivaca (a A+1 jest pokazivac) oznacava da se mijenja/uzima vrijednost. Stoga je to identicno kao i:

A[1] = 5;

 

To su osnove. Ima tu jos dosta toga, ali mislim da sam najvaznije opisao.

Nadam se da pomaze.

Sa štovanjem, brahle!
Poruka je uređivana zadnji put čet 3.9.2009 17:01 (brahle).
15 godina
odjavljen
offline
C pointeri

Ako se ucis u C-u, preporucio bi ti knjigu C in 21 days, jako je dobra, i pointeri su odlicno objasnjeni, mores je sebi skinit s neta besplatno u pdf-u, jest da je stara 10 godina, ali je jako dobra, imas i vjezbe da sam radis i zadatke postavite, tako da bi ti je toplo preporucio

 

naucit ces sve osnove, a dalje je onda svakako na tebi

When life gives you lemons throw them at the mean people and hope it gets them in the eyes.
 
0 0 hvala 0
15 godina
neaktivan
offline
C pointeri

dakle koliko sam skužio sljedeći kod:

int i;

int *x;

x = &i;

x = 1;

daje isti rezultat kao i :

int i;

i = 1;

?

 

thunder in my room :prijevod: Moja mama viče!92% tinejđera sluša turbo folk. Ako si ti među onih 8% koji još uvijek slušaju pravu glazbu kopiraj si ovo u potpis.Da se Facebook server sruši 90% m
 
0 0 hvala 0
14 godina
neaktivan
offline
RE: C pointeri

Ne...

 

Nisi stavio u četvrtom redu *x

 

ta * pokazuje da je to pointer...

scio me nihil scire!
Poruka je uređivana zadnji put čet 3.9.2009 16:56 (eRasmos).
15 godina
odjavljen
offline
RE: C pointeri
Capitan Hook kaže...

dakle koliko sam skužio sljedeći kod:

int i;

int *x;

x = &i;

x = 1;

daje isti rezultat kao i :

int i;

i = 1;

?

 

Nije ti dobar 4. red, treba bit *x=1, jer ako napise x=1, ti zapravo x-u kazes da pokazuje na adresu pod brijem 1, a onda ti more pokazivati bilo gdje, i ukoliko budes kasnije mijenjo vrijednost od x-a prepisat ce ti nesto na nekom nepoznatom mjestu

When life gives you lemons throw them at the mean people and hope it gets them in the eyes.
15 godina
protjeran
offline
RE: C pointeri
Capitan Hook kaže...

dakle pošto učim c došo sam i na temu pointeri...surfo sam o njima i malo sam skužio, ali bio bih jako zahvalan ako bi mi netko svojim rječima objasnio šta je to i možda eventualno napisao neki primjer toga...

P.S. Kad budete objašnjavali, govorite laičkim jezikom, dakle što lakše bez nekih previše stručnih izraza nego da i mi obični smrtnici to razumijemo...

Ajmo laički...

 

Svi tipovi podataka sadrže sebi specifične vrijednosti. Tako int služi za cijele brojeve, float za realne, char za znakove itd.. Pointer je tip varijable koji radi s memorijskim adresama drugih varijabli. Znači, pointer kao svoju vrijednost ima neku adresu. Npr.:

 

 

int n = 5;

 

Ono što mi sad znamo jest da postoji varijabla n i da je njena vrijednost 5. No, ono što nam također može biti bitno jest gdje se u memoriji ta varijabla nalazi. Kako to saznati?

 

print("n se nalazi na adresi %x", &n);

 

i sada će se ispisati nešto poput 12ff88. Znači, to je ta adresa. E sad ajmo kreirati pointer:

 

int *p;

p = &n;

 

Svaki tip varijable, pa tako i pointer mora imati svoj tip. Tako smo prvom naredbom deklarirali pointer p koji pokazuje na adresu varijable tipa int  tj. int* p. Drugom naredbom smo rekli na koju točno adresu taj pointer pokazuje tj. pokazuje na adresu integer varijable n. I kako to sada iskoristiti?

 

printf("%x %d", p, *p);

Ispisati će se adresa varijable n (p) i vrijednost varijable n (*p). Jako je važno da razlikuješ pointer tj. adresu na koju on pokazuje od vrijednost koja se tamo nalazi tj. u ovom slučaju *p. Znači,

 

p - adresa na koju pointer pokazuje

*p - vrijednost koja se nalazi na toj adresi

 

Sada je isto napisao

 

n = 10;

 

ili

 

*p = 10;

 

jer u oba slučaja piše se na adresu varijable n. Slobodno se uvjeri tako da ispišeš n.

 

Zašto koristiti pointere? Do dosta tih stvari ćeš kasnije doći no ukratko:

 

1) Kada se razmjenjuju podaci među funkcijama. Lokalna varijabla svake funkcije djeluje kao da ima zaštićen memorijski prostor i iz jedne funkcije ne možeš direktno pristupiti lokalnoj varijabli druge funkcije. Zato se koriste pointeri.

 

2) Kada se dinamički alocira memorija. Stog (stack) je u pravilu premalen za veće količine memorije pa se onda na heap-u dinamički alocira memorija preko pokazivača.

 

No, za sada je bitno da razumiješ osnove, a kako ćeš ići dalje budeš vidio primjere primjene. Po meni, pointeri su jedna od najjačih karakteristika koje uopće može imati programski jezik, i zbog toga C je toliko jak da su se u njemu mogli (i još mogu) pisati operacijski sustavi poput Linuxa, Windowsa i drugih.

14 godina
protjeran
offline
C pointeri

Za sve koji se misle baviti C-om preporučam da si nabave knjigu : "C primer - 5th edition"

 

 

Life is all about ass; you are either covering it,laughing it off, kicking it, kissing it, busting it, or trying to get a piece of it.
Moj PC  
0 0 hvala 1
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice