On-line učionica

13. april 2012.

Pokazivači

Filed under: C posle Pascal-a,Programiranje — jelena100janovic @ 10:28 am

Pokazivači su osnovni deo C-a. Ako ne umete da koristite pokazivače kako treba onda ste u suštini izgubili svu snagu i fleksibilnost koju C dozvoljava. Tajna C-a je u njegovom korišćenju pokazivača.

C koristi pokazivače mnogo. Zašto?

  • To je jedini način da iskažete neka izračunavanja.
  • Proizvodi kompaktan i efikasan kod.
  • Obezbeđuje veoma moćnu alatku.

C koristi pokazivače eksplicitno sa:

  • Nizovima,
  • Strukturama,
  • Funkcijama.

Pokazivači su možda najteži deo C-a za razumeti. C-ova implementacija je blago DRUGAČIJA nego kod drugih jezika.

Šta je pokazivač?

Pokazivač je promenljiva koja sadrži adresu u memoriji neke druge promenljive. Možemo imati pokazivač na bilo koji tip promenljive.

Unarni operator & daje „adresu promenljive“.

Indirektni operator * daje „sadržaj objekta na koji pokazuje pokazivač“.

Da biste deklarisali pokazivač na promenljivu napišite:

int *pokazivac;

Moramo asocirati pokazivač na određeni tip: Ne možete dodeliti adresu short int-a long int-u, na primer.

Razmotrimo efekat sledećeg koda:

Vredno je razmotriti šta se dešava na mašinskom nivou u memoriji da bismo potpuno razumeli kako pokazivač funkcioniše. Razmotrimo sliku. Pretpostavimo, radi ove diskusije da se promenljiva x nalazi na memorijskoj lokaciji 100, y na 200 i ip na 1000. Pokazivač je promenljiva i zato njegove vrednosti moraju negde da se čuvaju. Priroda vrednosti pokazivača je to da je nova.

Sada dodele x=1 i y=2 očigledno upisuju te vrednosti u promenljive. ip je deklarisana kao pokazivač na integer i dodeljena mu je adresa x-a. Tako se u ip upisuje vrednost 100.

Dalje se y-u dodeljuje sadržaj objekta na koji pokazuje ip. U ovom primeru ip trenutno pokazuje na memorijsku lokaciju 100 – adresu promenljive x. Tako y dobija vrednost x-a – što je 1.

Već smo videli da C nije previše izbirljiv kad se radi o dodeli vrednosti različitog tipa. Zato je savršeno legalno (iako nimalo uobičajeno) dodeliti trenutnu vrednost pokazivača ip promenljivoj x. Vrednost pokazivača ip je u ovom slučaju 100.

Na kraju možemo dodeliti vrednost objektu na koji pokazuje pokazivač (*ip).

Kada se pokazivač deklariše on ne pokazuje ni na šta. Morate mu dodeliti na šta pokazuje pre nego što ga upotrebite.

Zato će…

int *ip;
*ip=100;

generisati grešku (program crash!).

Pravilna upotreba je:

Možemo vršiti celobrojne operacije nad pokazivačima:

Pokazivač na bilo koji tip podataka je adresa u memoriji – što je ceo broj. Pokazivač definitivno nije ceo broj.

Razlog zbog koga dodeljujemo pokazivaču na koji tip podataka će pokazivati je da bi znao koliko bajtova taj podatak zauzima. Kada inkrementiramo pokazivač mi povećavamo pokazivač za jedan „blok“ memorije.

Dakle za pokazivač na char naredba ++ch_pok dodaje 1 bajt na adresu.

Za pokazivač na int ili float naredba ++ip ili ++fp dodaje 4 bajta na adresu.

Razmotrimo float promenljivu (fl) i pokazivač na float (flp) kao što je pokazano na slici.

Pretpostavimo da flp pokazuje na fl onda ako inkrementiramo pokazivač (++flp) on će se pomeriti na prikazanu poziciju 4 bajta dalje. Ako sa druge strane dodamo 2 pokazivaču onda će se pomeriti za 2 float pozicije npr. 8 bajtova kao što je prikazano na slici.

Ostavite komentar »

Nema komentara.

RSS feed for comments on this post. TrackBack URI

Ostavite odgovor

Popunite detalje ispod ili pritisnite na ikonicu da biste se prijavili:

WordPress.com logo

Komentarišet koristeći svoj WordPress.com nalog. Odjavite se / Promeni )

Slika na Tviteru

Komentarišet koristeći svoj Twitter nalog. Odjavite se / Promeni )

Fejsbukova fotografija

Komentarišet koristeći svoj Facebook nalog. Odjavite se / Promeni )

Google+ photo

Komentarišet koristeći svoj Google+ nalog. Odjavite se / Promeni )

Povezivanje sa %s

Create a free website or blog at WordPress.com.

%d bloggers like this: