Tiek rodyklės, tiek nuorodos yra galingiausios C ir C ++ savybės, leidžiančios programuotojams tiesiogiai valdyti atminties adresą, kad būtų galima efektyviai valdyti atmintį..
Abu yra kintamieji, naudojami netiesiogiai nurodyti kitiems objektams, ir jie turi keletą bendrų paviršiaus bruožų. Nors jie turi daug bendrų galimybių, juos taip pat labai sunku suprasti.
Rodyklė yra kintamasis, turintis kito kintamojo atminties adresą, tuo tarpu nuoroda yra tarsi rodyklė, kuria galima netiesiogiai remtis kitam kintamajam..
Atrodo, kad dauguma programuotojų supranta, kada naudoti rodykles ir kada naudoti nuorodas, tačiau jie dažnai susiduria su problemomis, kurių sprendimas atrodo neaiškus..
Taigi, kad geriau suprastume filosofiją, supraskime skirtumą tarp dviejų.
Kiekvienas kintamasis yra atminties vieta, apibrėžta jo adresu ir suporuotas su identifikatoriumi, kuriame yra reikšmė, kuri gali būti pakeista programos metu. Paprastai tariant, kintamasis yra simbolis, žymintis kiekį.
Rodyklė yra kintamasis, kuriame yra kito kintamojo atminties adresas. Rodyklė yra ne kas kita, kaip adresas, o kintamasis, kuriame laikomas rodyklė, vadinamas rodyklės kintamuoju.
Idėja yra vietoj skaitinių adresų naudoti identifikatorius (arba pavadinimus), kad palengvėtų programavimo našta ir taip sumažėtų programų sudėtingumas. Kadangi šie adresai nurodo realias kompiuterio atminties vietas, rodykles galima naudoti norint pasiekti ir manipuliuoti atmintyje saugomu turiniu.
Kaip ir bet kuris kintamasis ar konstantas, rodyklės turi būti nurodytos jų tipams. Kadangi rodyklėse yra atminties adresai, priklausantys atskiram duomenų tipui, prieš pradedant dirbti su jais, jie turi būti deklaruojami naudojant rodykles. Bendroji rodyklės deklaracijos forma yra:
Data_type * var-name;
Čia „Data_type“ yra pagrindinis rodyklės tipas, o „var-name“ yra rodyklės kintamasis. Žvaigždutė (*) naudojama žymėti rodyklę, kuri kintamąjį „var-name“ nurodo kaip rodyklės kintamąjį.
int * p; // sveikasis rodyklė
plūdės * x; // plūdinis rodyklė
Čia kintamasis „p“ nurodo sveikąjį skaičių duomenų tipą, kuris deklaruojamas kaip „int“, kuris nurodo kintamojo duomenų tipą. Panašiai antrame pavyzdyje „float“ reiškia kintamojo „x“ duomenų tipą, kuris iš tikrųjų yra žymimas kaip kintamojo taško kintamasis.
Nuoroda yra tarsi rodyklė, turinti netiesioginę prieigą prie kintamojo. Tai tarsi kito kintamojo slapyvardis, reiškiantis, kad tai tik dar vieno jau esančio kintamojo vardas.
Tai leidžia programuotojams sukurti antrąjį kintamojo pavadinimą, kurį jie gali naudoti manipuliuodami tame kintamajame saugomu turiniu. Tai subjektas, kuris yra kito kintamojo slapyvardis ir turi tą patį adresą kaip ir pirminis kintamasis. Tai palaiko nuorodos, veikiančios kaip funkcijos formalieji parametrai, apibrėžimas, nurodantis kintamąjį, todėl jo negalima nustatyti iš naujo, tai reiškia, kad jo negalima nurodyti kitam kintamajam.
Skirtingai nuo rodyklių, jiems nereikia nurašyti operatoriaus, kad pasiektų vertę; iš tikrųjų jie gali būti naudojami kaip normalūs kintamieji.
int i;
int & ri = i;
„Ri“ yra sveikasis skaičius, inicializuotas į „i“. Jis skelbia „ri“ kaip „nuorodos į int“ objektą. Nuorodą galima lengvai supainioti su žymekliu, kuris yra nepriklausomas kintamasis, kurio adreso reikšmių negalima priskirti sukūrus kitą.
- Abu jie suteikia beveik panašias galimybes, susijusius su naudojimu, ir atskirti juos gali būti sudėtinga. Rodyklė yra tik kintamasis, kuris saugo kito kintamojo atminties adresą, tuo tarpu nuoroda yra tarsi jau esančio kintamojo slapyvardis. Tai sukuria antrąjį kintamojo pavadinimą, kuris gali būti naudojamas modifikuoti tame kintamajame saugomą turinį.
- Rodyklė yra kaip ir bet kuris kitas kintamasis, kuriame saugomi duomenys. Skirtingai nuo kitų kintamųjų, rodyklės kintamieji vietoj verčių saugo atminties adresus. Rodyklės žymėjimas nutraukiamas naudojant indirection operatorių *, kad pasiektumėte kintamojo, į kurį jis nurodo, atminties vietą. Kita vertus, nuorodoms nereikia jokio nuorodas atšaukiančio operatoriaus, kad pasiektų vertę.
- Skirtingai nuo rodyklių, kurias bet kada galima inicijuoti, inicijuojant reikia priskirti nuorodas. Rodykles galima pasiekti tiesiogiai, tuo tarpu nuorodų negalima tiesiogiai pasiekti.
- Rodyklės kintamasis turi savo vietą atmintyje, o tai reiškia, kai deklaruodami rodyklę nurodote vietą, kuri yra atminties adresas, priskirtas kiekvienam atminties vienetui. Rodyklės kintamasis turi tą patį adresą, kur jis išsaugotas atmintyje. Atvirkštinis kintamasis, kita vertus, yra kito kintamojo slapyvardis, tokiu būdu nurodant atskaitos kintamojo adresą.
- NULL žymi sąrašo pabaigą, tai reiškia, kad reikšmė nežinoma, ir nurodo, kad kintamasis neturi galiojančios adreso vietos. NULL reikšmę galima tiesiogiai priskirti žymeklio kintamajam, kas rodo, kad ji niekur nenurodo, tuo tarpu NULL negali būti priskiriama atskaitos kintamajam..
Rodyklės visada buvo tarp mėgstamiausių „C / C ++“ programuotojų diskusijų temų, kol nebuvo nuorodų į paveikslą. Nuorodos yra šiek tiek panašios į rodykles, tačiau, palyginti su jomis, nemaža dalis turi pranašumų ir trūkumų. Nors abu gali būti naudojami keičiant vienos funkcijos vietinius kintamuosius kitoje funkcijoje, jie turi savo skirtumų. Abi yra galingos C ir C ++ savybės, leidžiančios tiesiogiai valdyti atmintį, tačiau su keliomis išimtimis. Rodyklė laiko kintamojo atminties adresą, tuo tarpu nuoroda yra tik kito kintamojo slapyvardis.