Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

kada koristiti pointere

[es] :: C/C++ programiranje :: kada koristiti pointere

[ Pregleda: 2653 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mladenvasic
Mladen Vasic
Doboj

Član broj: 50512
Poruke: 124
81.93.74.*



Profil

icon kada koristiti pointere23.05.2005. u 07:09 - pre 230 meseci
Pozdrav svima, nesto sam malo cackao oko pointera i shvatio sam sustinu a sad me zanima kada ih treba koristiti. U nekim primjerima sam vidjeo upotrebu pointera a vrlo lako se moglo rijesiti "obicnim" variablama. Ako moze da mi neko malo detaljnije objasni upotrebu pointera...
 
Odgovor na temu

anon315

Član broj: 315
Poruke: 1657
*.adsl.sezampro.yu.



+13 Profil

icon Re: kada koristiti pointere23.05.2005. u 07:20 - pre 230 meseci
Pa recimo kada hoćeš da napraviš dinamički niz ili listu tj. bilo kakvu dinamičku strukturu podataka ili ako želiš da funkciji predaš nekakav vektor/matricu to onda radiš preko pokazivača umesto da ih definišeš kao globalne, jer ne možeš funkciji da predaš vektor/matricu. Ima sigurno tu još dosta primera, ajde ostali!

Videćeš da se kasnije (C++, Java ...) ustvari svim objektima pristupa preko pokazivača/reference.
 
Odgovor na temu

mladenvasic
Mladen Vasic
Doboj

Član broj: 50512
Poruke: 124
81.93.74.*



Profil

icon Re: kada koristiti pointere23.05.2005. u 08:32 - pre 230 meseci
Hvala na odgovoru ali kad bi mogli to malo pojednostaviti posto sam jos pocetnik, neki primjer itd. Kada koristiti dinamicko aliciranje memorije? Da li se poboljsavaju performanse programa ako se koriste pointeri? Da li je korisno neke "obicne" radnje rijesavati sa pointerima npr. deklarisati neke promjenjive i sve sto trebam raditi sa njima da to radim preko pintera ????
HVALA NA RAZUMJEVANJU ... (pocetnik)
 
Odgovor na temu

anon315

Član broj: 315
Poruke: 1657
*.beoland.sezampro.yu.



+13 Profil

icon Re: kada koristiti pointere23.05.2005. u 10:10 - pre 230 meseci
Pocetnik bi trebao prvo da dohvati neku dobru knjigu pa da je izbistri, a onda da postavlja pitanja ;o)
 
Odgovor na temu

dragansm
Dragan Smiljanic

Član broj: 38170
Poruke: 191
212.200.125.*



Profil

icon Re: kada koristiti pointere26.05.2005. u 19:16 - pre 229 meseci
Mozda je bolje umesto pitanja "kada koristiti pointere" da nadjes odgovor "kako koristiti pointere". Uz malo citanja tudjeg koda i resavanja konkretnih problema vrlo ces brzo naci odgovor i na tvoje pitanje.
Zvuci banalno, ali namena pokazivaca je da "adresiraju" neki memorijski prostor. Cesce se tu nalaze upisani podaci ili cak pokazivaci na drugi memorijski prostor, a postoje i pokazivaci na memorijski prostor gde se nalazi "izvrsni kod" funkcija.
Memorijski prostor o kome se vodi racuna pri pisanju C/C++ programa moze biti heap (lokalne promenljive koriste ovaj prostor - stek), staticki (prostor koji je rezervisan za staticke promenljive i koji je zauzet celo vreme dok se izvrsava tvoja aplikacija) i dinamicki alociran prostor (deo memorije koji se alocira i oslobadja za vreme izvrsavanja.
Bilo koji od ovih delova memorije moze da sadrzi pokazivace (ptrs), a prts mogu da adresiraju bilo koji od ovih delova.
Dva su glavna nacina kako da koristis ptrs.
1) da pokazuju vec na alociran prostor:

static char txt[] = "dddddddddddd"
void Fja()
{
char *t = txt;
char first = *t;
++t;
*t = 'e';
}

2) da pokazuju na prostor koji sam alociras
void Fja()
{
char c = new char[20];
*c = 'e';
*(c + 1) = 'f';
*c[2] = 'g';
delete[] c;
}
Medjutim, ako ovako napises:
void Fja()
{
char c = new char[20];
*c = 'e'; ++c;
*c = 'f'; ++c;
*c = 'g'; ...

}
izgubices adresu alociranog prostora na koju je prvo pokazivala prom. c i neces moci (ukoliko ne znas koliko si puta povecao c, pa da ga umanjis na kraju za taj broj) da oslobodis prostor.
Cak i ako ne zvuci strasno "zarobljeno 20 bajtova", zamisli da se Fja poziva 300 puta u sek. Vrlo brzo bi ti aplikacija, u potrazi za memorijom, pocela "brljati" po HD.
Prem tome, UVEK moras da oslobodis sav alociran prostor.
Da bi sebi pomogao, da bi izbegao warninge ili greske kompajliranja, pucanje programa,... uvek se trudi da koristis ptrs na ovaj nacin:

int *a = 0;
.....
Deo programa gde su inicijalizacije ili deo koda kome treba prostor za N int-ova
a = FjaKojaVracaPokazivacNaNizInt() ili a = new int[N]
......
Priprema za "terminaciju" ili deo koda kad ti vise ne trebaju tih N int-ova
if (a)
{
delete a;
a = 0;
}
.....
Jedna bitna primena ptrs je kad ti nije dovoljna samo jedna povratna vrednost f-je. Recimo, fja koja vraca "polozaj misa" na ekranu:
void GdeJeMis( int *x, int *y ) {
*x = ...;
*y = ...;
}
int x, y;
GdeJeMis( &x, &y );

Posebno je bitno koristiti pts kad imas f-ju koja zavisi od velikog broja ulaznih parametara. Tada je najbolje da deklarises strukturu/klasu koja sadrzi sve te podatke i da umesto strukture kao ulazni parametar prosledis njenu adresu:
struct {
float m[100][100];
float det;
} MATiDET;
MATiDET md;
InitMat( &md );
void InitMat( MATiDET *mm )
{
...
}

Ptr moze biti i rezultat izvrsavanje neke fje:
int *NapraviMesta( int n ) { return new int[n]; }

int *p = NapraviMesta( 10 );
KoristiP( p );
delete[] p;

Svakako ovo je jako dobar savet
Citat:
Vanja Petreski: Pocetnik bi trebao prvo da dohvati neku dobru knjigu pa da je izbistri, a onda da postavlja pitanja ;o)

a jos je bolji efekat ako ti je knjiga ispred tastature i ako si ukucane poslao u banju ili bioskop :)
 
Odgovor na temu

[es] :: C/C++ programiranje :: kada koristiti pointere

[ Pregleda: 2653 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.