[ define @ 09.02.2005. 21:28 ] @
Ljudi nikako ne mogu da shvatim kako treba upotrebu pokazivaca. Radim ja nekako neke sitnice, ali ne razumem koja je poenta. Znam da pokazivac moze da ukazuje na neku drugu promenljivu ili njenu adresu. Ali ne razumem za sta on konkretno koristi, evo jednog primera funkcije.

Code:
Napisati funkciju koja će sve elemente zadatog celobrojnog polja p od N elemenata pomeriti za određeni broj mesta pomak (pomak < N). Ukoliko je pomak pozitivan, elementi polja pomiču se udesno, a ukoliko je pomak negativan, elementi polja pomiču se ulevo. Ispražnjeni elementi pune se nulama.

Primer pomaka za pomak = 2 i polje [10 40 50 60 12]:

Polje prije posmaka: [10 40 50 60 12]
Polje nakon posmaka:[ 0  0 10 40 50]

Rešenje: 
void pomakniPolje(int *p, int N, int pomak) {
    int i;
    // ako je pomak udesno
    if (pomak > 0 && pomak < N) {
        for (i = N - 1 - pomak; i >= 0; i --)
            p[i + pomak] = p[i];
        for (i = pomak - 1; i >= 0; i --)
            p[i] = 0;
    }



    // ako je pomak ulevo
    else if (pomak < 0 && -pomak < N) {
        pomak = -pomak;
        for (i = 0; i <= N - 1 - pomak; i++)
            p[i] = p[i + pomak];
        for (i = N - pomak; i < N; i++)
            p[i] = 0;
    }
}

Zbunjuje me ovo void pomakniPolje(int *p, int N, int pomak)
zasto int *p kada se u daljem tekstu koristi polje p[]
[ CimBac @ 09.02.2005. 22:28 ] @
Pokazivac u sustini sadrzi adresu neke nase promenljive. Ti u tvom primeru funkciji saljes tu adresu tvog niza od recimo 5 elemenata tipa int, odnosno saljes adresu 1. elementa niza. Da bi mogao da pristupis tim poljima niza pomocu prosledjene adrese, koristi se operator [], koji uz naveden index (broj izmedju tih kockastih zagrada), pristupa odredjenoj vrednosti (odredjena indexom) naseg niza i barata s njom.

Da bi nastavio sa programiranjem potrebno je da dobro shvatis koncept pokazivaca, nizova, i adresne aritmetike koja povezuje ova 2 pojma.
[ aax @ 10.02.2005. 02:41 ] @
za pocetak prodji kroz tutorial na :
http://pw1.netcom.com/~tjensen/ptr/pointers.htm
uvek se nadje da osvezis znanje ili ako si pocetnik da malo bolje savladas problematiku.
good luck,
alex
[ varginjo @ 10.02.2005. 06:21 ] @

A jer ima neki tutorial za pokazivace, na srpskom ?
[ define @ 10.02.2005. 12:17 ] @
ma radim ja sa nizovima, dosta dobro (bar ovo sto mi trenutno ucimo u C-u), nego me buni zasto negde kao npr ovde koristimo pokazivac umesto niza?
[ Ivand @ 10.02.2005. 12:45 ] @
Kada prosledis niz kao argument funkciji , ceo niz se kopira i ti u samoj funkciji radis sa kopijom tako da bilo koje izmene ili bilo sta drugo se nece videti u glavnom programu, a funkcije nemogu da vrate niz kao argumet.

Kada funkciji prosledis pointer na niz , u f-ciji radis sa originalom niza a ne sa njegovom kopijom tako da se sve izmene odrazuju u glavnom programu.

To je samo koriscenje pointer u ovom slucaju , a mogucnosti primene su .... neogranicene.
[ Buffy @ 10.02.2005. 12:47 ] @
Citat:
define: ma radim ja sa nizovima, dosta dobro (bar ovo sto mi trenutno ucimo u C-u), nego me buni zasto negde kao npr ovde koristimo pokazivac umesto niza?

Ako znas da radis sa nizovima ,onda bi trebao da znas raditi sa pokazivacima.
Jedno bez drugog ne moze.
Lijepo uzmi dobru knjigu i uci.
[ Marko Stankovic @ 10.02.2005. 14:52 ] @
Citat:
Ivand: Kada prosledis niz kao argument funkciji , ceo niz se kopira i ti u samoj funkciji radis sa kopijom tako da bilo koje izmene ili bilo sta drugo se nece videti u glavnom programu, a funkcije nemogu da vrate niz kao argumet.
Kada funkciji prosledis pointer na niz , u f-ciji radis sa originalom niza a ne sa njegovom kopijom tako da se sve izmene odrazuju u glavnom programu.


Lose si ovo razumeo. Ovako nesto moze da radi u pascalu, u c-u niz ne moze da se prenese po vrednosti. Jer samo ime niza je nepromenljivi pokazivac. Znaci u C-u jedino pokazivac prenosis po vrednosti i sa niz[j] uvek pristupas originalnim vrednostima niza, jedino ce pokazivac niz u funkciji da bude kopija originalnog pokazivaca.


Citat:
define: ma radim ja sa nizovima, dosta dobro (bar ovo sto mi trenutno ucimo u C-u), nego me buni zasto negde kao npr ovde koristimo pokazivac umesto niza?


Zato sto je samo ime niza pokazivac na prvi element u nizu, znaci niz==pokazivac. Kao sto rekose ljudi procitaj jos malo knjigu i razjasnice ti se ovo, jer ovo su bas elementarne stvari iz c-a.
[ aleksandaraleksandar @ 10.02.2005. 17:32 ] @
bez zelje da vam pojednostavljujem zanat, ali imam jednu sliku u glavu
i nikako da je razresim :)

ako je 10 konja koje vuku kociju, niz; sta su pokazivaci, uzde ili 10
ruku (5 kocijasa), koji upravljaju konjima?
[ Shatterhand @ 10.02.2005. 22:14 ] @
Losha metafora ali mislim da 10 ruku treba da shvatis kao pointere ;)
[ Ivand @ 11.02.2005. 00:30 ] @
@Marko da u pravu si pogresio sam kada sam rekao nizovi, to je inace tacno za ostale promenljive koje nisu nizovi ,
u c-u koristimo pokazivac da bi menjali vrednost u glavnom programu a ne vrednost kopije prosledjene f-ciji
u c++-u u tu svrhu koristimo upucivace
[ Goran Arandjelovic @ 17.02.2005. 20:41 ] @
Ako ti se svidi, mozes pisati i ovako:

Code:
int *p;
5[p]=1; // predstavlja isto sto i p[5]=1;
// a mozes i ovo.. mada se manje koristi
*(p+5)=1;


pozz.