On-line učionica

4. jun 2012.

Višedimenzioni nizovi i pokazivači

Filed under: C posle Pascal-a,Programiranje — jelena100janovic @ 11:36 am

Trebalo bi da mislimo o višedimenzionalnim nizovima na drugačiji način u C-u: Dvodimenzionalni niz je u stvari jednodimenzioni niz, kome je svaki element niz.

Otuda oznaka a[n][m].

Elementi niza se čuvaju red po red.

Kada prosleđujemo dvodimenzionalni niz funkciji moramo naznačiti broj kolona – broj redova je nebitan.

Razlog za ovo su ponovo pokazivači. C mora da zna broj kolona da bi skakao sa reda na red u memoriji.

Pretpostavimo da a[5][35] treba da bude prosleđeno funkciji:

Možemo napisati:

f(int a[][35]) {…}

ili čak:

f(int(*a)[35]) {…}

Potrebne su nam zagrade (*a) obzirom da [] imaju prioritet nad *.

Dakle:

  • int (*a)[35]; deklariše pokazivač na niz od 35 celih brojeva.
  • int *a[35]; deklariše niz od 35 pokazivača na int.

Sada pogledajmo (suptilnu) razliku između pokazivača i nizova. Ovo obično ima upotrebu pri radu sa stringovima (nizovima znakova).

Razmotrimo:

char *ime[10];
char Nime[10][20];

Možemo legalno pisati ime[3][4] i Nime[3][4] u C-u.

Međutim

  • Nime je pravi dvodimenzionalni niz od 200 znakova.
  • Pristupa elementima sa 20*red+kolona+osnovna_adresa u memoriji.
  • ime ima 10 pokazivača.

Ako se svaki pokazivač u ime postavi da pokazuje na niz od 20 elemenata onda i samo onda će 200 znakova imati mesta (+10 elemenata).

Prednost poslednjeg je u tome što svaki pokazivač može pokazivati na niz druge dužine. Ali to je već naprednija tema🙂

Evo sada primera koji koristi i nizove i pokazivače. Napisaćemo program koji učitava matricu dimenzije m × n, a onda računa i ispisuje maksimalne elemente u poslednjem redu i poslednjoj koloni matrice.

Izlaz ovog programa izgleda ovako:

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: