On-line učionica

30. maj 2012.

Pokazivači i nizovi

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

Pokazivači i nizovi su veoma tesno povezani u C-u.

Zašto? Razmišljajte o elementima niza upisanih u uzastopne memorijske lokacije.

Razmotrimo sledeće:

int a[10],x;
int *pa;
pa=&a[0];  /* pa je pokazivac na a[0] */
x=*pa;
/* x dobija sadrzaj na koji pokazuje pa (a[0] u ovom slucaju) */

Da bismo stigli donekle u nizu (slika) koristeći pokazivač mogli bismo uraditi sledeće:

pa+i ≡ a[i]

Ne postoji provera granica niza i pokazivača pa možete lako otići iza memorije niza i prepisati druge podatke.

C je međutim mnogo suptilniji u svojoj vezi između nizova i pokazivača.

Na primer možemo napisati

pa=a;

umesto

pa=&a[0];

i

a[i]

može biti napisano kao

*(a+i)

Npr.:

&a[i] ≡ a+i

Takođe izražavamo adresiranje pokazivača ovako:

pa[i] ≡ *(pa+i)

Međutim pokazivači i nizovi se razlikuju:

  • Pokazivač je promenljiva. Možemo napisati pa=a i pa++.
  • Niz nije promenljiva. Naredbe a=pa i a++ su ilegalne.

Ove stvari su veoma važne. Osigurajte se da ih razumete. Videćemo još mnogo ovoga.

Sada možemo razumeti kako se nizovi prosleđuju funkcijama.

Kada se neki niz prosleđuje funkciji ono što se u stvari prosleđuje je lokacija u memoriji za njegov početni član.

Dakle:

f (a,n) ≡ f (&a[0],n)

Ovo je razlog zbog koga se funkcija deklariše sa:

int f (int a[], int n)

Ekvivalentna deklaracija je:

int f (int *a, int n)

obzirom da je

int a[] ≡ int *a

Pogledajmo kako možemo napisati funkciju f koja broji nule u nizu:

Sada napišimo funkciju g koja izdvaja parne članove jednog niza i pravi drugi:


Ovde smo prenosili nizove kao takve, a veličinu niza b (m) preko pokazivača.

Na kraju, zadatak za vas: napišite program koji, koristeći ove dve funkcije, za dati niz broji koliko ima nula, koliko neparnih, a koliko parnih članova. Srećno!🙂

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: