You are on page 1of 4

Pokazivači i funkcija

Pokazivači se često koriste za prenos podataka u funkciji preko adrese, što se postiže najavom
argumenta funkcije kao pokazivača.

Na taj način funkcija može mijenjati vrijednosti prenesenih promjenljivih.

Primjer.
/*Funkcija za zamjenu vrijednosti upotrebom pokazivača je */
#include<stdio.h>
void zamjena (int*a, int*b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
void main()

int a, b;
printf(“\n Unesite dva cijela broja“);
scanf(“%d,%d“,&a,&b);
printf(“Vrijednosti prije zamjene \na=%d\tb=%d“, a, b);
zamjena (&a,&b);
printf(“\nVrijednosti nakon zamjene su \ na=%d\tb=%d“, a, b);
}
Osim kao argument pokazivač se može koristiti I tako da izlazna vrijednost iz funkcije bude
pokazivač.
Takođe je moguće definisati i pokazivač na funkciju.

Polja i pokazivačč i
Elementima polja je najjednostavnije pristupati preko indeksa.
Pojedinom elementu niza se može pristupiti i preko adrese, jer je njegovo ime bez uglastih
zagrada pokazivač na polje

Za deklarisani niz

int niz[10];

njegovim elementima možemo pristupiti preko indeksa; niz[0], niz[1], niz[2],...


ali i preko adrese: *(niz), *(niz+1)...
moguće je,za pristup elementima niza preko pokazivača, najaviti promjenljivu pokazivač koja
je istog tipa kao što je i polje čijim elementima treba pristupiti i pridružiti mu početnu
adresu polja.
Primjer

Ako je najavljeno polje od 10 mjesta i pokazivač

int niz[10] , *p, a;


potrebno je inicijalizirati pokazivac

p=&niz[0];
ili
p=niz;

inicijalizacija se može predstaviti ovako:

niz[0] niz[1] niz[2] ... niz[0] niz[0] niz[0]

Pokazivač p sadrži adresu prvog elementa niza,a naredba a=*p promjenljivoj a pridružuje
vrijednost prvog elementa niza.
Kako pokazivač p pokazuje na prvi element polja onda će pokazivač p+1 pokazivati na drugi
element niza I tako redom.
Dakle, indeks elementa niza odgovara cjelobrojnoj vrijednosti za koju se povećava pokazivač.
Postoje dva načina pristupanjima pojedinim elementima niza:

I način

int niz [10], *p, a;


p=&niz[0];
p++;
a=*p;

naredbom p++ pokazivac se pomakne na sljedeci element u nizu I zatim se vrijednost toga
elementa pridruzi promjenljivoj a.

Treba razlikovati pokazivač I vrijednost promjenljive na koju pokazivač pokazuje. Naredbom


p++ pomičemo pokazivač na sljedeći element u nizu, a naredbom *(p)++ povećavamo
vrijednost promjenljive na koju pokazivač pokazuje.
II način

int niz [10], *p, a;


p=&niz[0];
a=*(p+1);

na ovaj način ne pomiče se pokazivač, ali promjenljivoj a se pridružuje vrijednost sljedećeg


elementa u nizu

Zadatak
Neka je dat niz u koji su upisane vrijednost 1, 12, 32, 14 i 5. Napišite program koji računa sumu
elemenata tog niza upotrebom pokazivača.

#include<stdio.h>
void main()
{
int i, s=0, niz[]={1,12,32,14,5};
int *pok;
pok=&niz[0];
for(i=0;i<5;i++)
s+=*pok++;
printf("Trazeni zbroj je %d",s);
}

Zadatak
Korištenjem pokazivača napravite program kojimće te omogućiti unos jednodimenzionalnog niza duljine
10 elemenata i ispisati najveći element tog niza.

#include<stdio.h>
void main()
{
int i, max, niz[10];
int *pok;
printf("Upisite vrijednosti clanova niza: \n");
for (i=0;i<10;i++)
{
printf("%d:",i+1);
scanf("%d",&niz[i]);
}
pok=&niz[0];
max=*pok;
for(i=1;i<10;i++)
{
pok++;
if (*pok>max) max=*pok;
}
printf("Najveci element niza je %d",max);
}

You might also like