Pereiti prie turinio

Rekomenduojami pranešimai

Sveiki visi!

Aš visai neseniai pradejau mokytis C++ o iki tol išbandžiau java ir C#.

Su C# pradirbau ilgiausiai ir man ši kalba patiko :) , bet nutariau pereiti prie C++ ir pažiureti kas išeis.

Taigi eisiu prie reikalo...

 

Galit kas nors paaiškinti kam reikalingi tie pointeriai C++ kalboje?? Nejaugi negalima išsiversti be ju :| .

Aš pagrinde supratau ka jie daro bet su jais kažka daryti sunkiai sekasi, dažnai susimaišau ir pan.

 

Tarkim, kam daryti taip:

 

int a;
int * pointer;

pointer = &a;
*pointer = 6;

std::cout << "a = " << a << std::endl;

 

Jeigu gali padaryti tesiog taip:

 

int a;

a = 6;

std::cout << "a = " << a << std::endl;

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki visi!

Aš visai neseniai pradejau mokytis C++ o iki tol išbandžiau java ir C#.

Su C# pradirbau ilgiausiai ir man ši kalba patiko :) , bet nutariau pereiti prie C++ ir pažiureti kas išeis.

Taigi eisiu prie reikalo...

 

Galit kas nors paaiškinti kam reikalingi tie pointeriai C++ kalboje?? Nejaugi negalima išsiversti be ju :| .

Aš pagrinde supratau ka jie daro bet su jais kažka daryti sunkiai sekasi, dažnai susimaišau ir pan.

 

Tarkim, kam daryti taip:

 

int a;
int * pointer;

pointer = &a;
*pointer = 6;

std::cout << "a = " << a << std::endl;

 

Jeigu gali padaryti tesiog taip:

 

int a;

a = 6;

std::cout << "a = " << a << std::endl;

 

 

Taip, galima išsiverst be jų, gali naudoti reference. Šiuo atvėju, tavo kode jų tikrai nereikia, bet kartais jie yra reikalingi pvz.: negali paduoti reference, reikia valdyti objekto gyvavimo laiką. Beje, jeigu naudoji pointer'ius, ten kur gali, naudok smart pointer'ius (bent jau kol pradedi programuoti), bus mažiau error'ų, bei mažiau užtruksi mąstydamas kada ką kur reikia sunaikinti.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taip, galima išsiverst be jų, gali naudoti reference. Šiuo atvėju, tavo kode jų tikrai nereikia, bet kartais jie yra reikalingi pvz.: negali paduoti reference, reikia valdyti objekto gyvavimo laiką. Beje, jeigu naudoji pointer'ius, ten kur gali, naudok smart pointer'ius (bent jau kol pradedi programuoti), bus mažiau error'ų, bei mažiau užtruksi mąstydamas kada ką kur reikia sunaikinti.

Kokiu atveju aš negalečiau panaudoti objekto reference?? :|

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 3 mėnesių...

99% atveju galima išsiversti be jų, įpač naudojant kompiliatorių kuris palaiko modernius standartus

referencai turi tamtikrų apribojimų, pvz negalima turėti referencų masyvo, referencai turi būti inicializuoti sukūrimo metu, ir niekada negali būti inicializuojami kutu objektu per visą gyvavimo laiką. Bet tam standartinė biblioteka turi tokį reference_wrapper šablonėli kuris padedą išvengti šių apribojimų. Taippat yra atvejų kai reikia objektus sukurti bei sunaikinti specifiniais laikais, kuriuo atveju gelbiaja "protingieji pointeriai", tai yra shared_ptr, unique_ptr, weak_ptr, make_shared, make_unique, jie bei standartiniai konteineriai leidžia c++ programutojui rašyti c++ koda nei karto nepanaudojus new ar delete.

Redagavo alexcoldberg
Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 1 mėnesio...

Praktiškai visais atvejais galima išsiversti be referencu, bet jie yra skirti efektyviam programos darbui, kai programa sudetinga ir atliekama daug skaiciavimų yra pravartu naudoti pointerius, nes yra kreipiamasi tiesiai i atmintį per adresą, taip pat išskiriama ir sunakinama atmintis kai to reikia. Tad pvz programuojant kokį serverį ir nenaudojant pointerių, servas nieko vertas būtų :unsure:

Redagavo babunas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kokiu atveju aš negalečiau panaudoti objekto reference?? :|

Pointerių aritmetikai.

Rašymui į pasirinktą (arbitrary) atminties vietą. To gali reikti OS developmente, ir pan.

 

Čia yra daugiau skirtumų. https://en.wikipedia.org/wiki/Reference_%28C%2B%2B%29#Relationship_to_pointers

 

----

 

O šiaip dėl paties pradinio klausimo: „kam tų pointerių“, yra ne viena priežastis. Pvz., didelę struktūrą perduoti į funkciją by-value gali nemažai kainuoti: be reikalo kopijuojama atmintis. Taip pat, be pointerio (ar reference) neišsiversi, jei funkcijai reikia modifikuoti paduotus duomenis "in-place", o ne grąžinti naują kopiją. Taip pat C stiliaus masyvai perduodami į funkcijas pointerių pavidalu (a == &a[0]).

Redagavo Silke
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.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

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