Pereiti prie turinio

Rekomenduojami pranešimai

Tu nori kad tau apie pointerius forume aiškintų? Čia reiks ne vieną ir ne du puslapius teksto prirašyt, kad juos normaliai išaiškint.

Užtat šaipymasis ir rėkalojimas yra „doing it right“. Pointeris laiko kintamojo atminties adresą, yra lyg „nuoroda“ į kintamąjį. Va, neparašiau dviejų puslapių, nors galėčiau. Rimtesnė pamoka yra čia. Tavo „nori kad tau forume aiškintų“ man panašus į „aš nemokėčiau paaiškinti“ ar „tu durnas bl, kaip galima nesuprast, dink iš čia“. Nei vieno, nei kito čia nereikia...

 

Norėjau surasti kažkada skaitytą straipsnį, kuriame taikliai išdėstoma, kodėl pointeriai nėra sunku. Nerandu...

 

 

Šiais laikais kompiuterinius žaidimus su c++ kurtų arba idiotas, arba neturintis ką veikt, arba senamadiškas žmogus.

...arba dauguma kompanijų ir dalis indie dev'ų... :lol:

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kiekvienas objektas yra saugomas atmintyje (konkrečiau – RAM'uose). Informacija RAM'uose turi savo adresus, todėl taip pat kiekvienas objektas turi savo adresą. Pavyzdžiui:

int a = 5;
cout << a << endl; //grąžina objekto vertę
cout << &a << endl; //grąžina objekto adresą

 

Taigi operatrius & grąžiną objekto poziciją RAM'uose. Pointer'iai kaip tik saugo tą poziciją:

int a = 5;
int* p = &a;
cout << p << endl; //grąžina objekto adresą
cout << *p << endl; //grąžina objekto vertę

 

Pointer'iai patogūs tuo, kad užima mažai vietos (tiek pat, kiek int), palyginus su kokios didelės klasės objektu. Taip pat jie praverčia, jei tiksliai nežinai, su kokiu kintamuoju teks atlikti operacijas, tarkim:

int a, b, c;
<...> priskiriamos reikšmės a, b, c
if(a > 0)
{
   a *= 2;
   a %= 5;
   <...> veiksmai su a
}
else if(a < -10)
{
   b *= 2;
   b %= 5;
   <...> veiksmai su b
}
else
{
   c *= 2;
   c %= 5;
   <...> veiksmai su c
}

galime pakeisti

int a, b, c;
<...> priskiriamos reikšmės a, b, c
int* p;
if(a > 0)
{
   p = &a;
}
else if(a < -10)
{
   p = &b;
}
else
{
   p = &c;
}
*p *= 2;
*p %= 5;
<...> veiksmai su p

 

Pointer'iui iškart sukurti naują objektą atmintyje naudojamas new operatorius.

int* p = new int(5);
double* q = new double(5.0);

 

Pointer'į galimą naudoti kaip masyvą:

int n = 15;
int* p = new int[n];
for(int i = 0; i < n; i++)
   cout << p[i] <<endl;

 

Atitinkamas kodas pasitelkiant ne dinaminį masyvą neveiktų, nes jam sukurti reikia konstantos:

int n = 15;
int a[n]; //meta klaidą

const int N = 15;
int b[N]; //viskas gerai

int c[15]; //viskas gerai

Todėl pointer'iai naudojami, kai iš anksto nežinoma, kokio dydžio masyvo reikia.

 

Būtina nepamiršti visada ištrinti objektą iš atminties, kai jis nebereikalingas, jei buvo naudotąsi pointer'iais:

int* p1 = new int(5);
delete p1;

int* p2 = new int[15];4
delete[] p2;

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...