C ++ rodyklės su pavyzdžiais

Turinys:

Anonim

Kas yra rodyklės?

C ++ rodyklė reiškia kintamąjį, kuriame yra kito kintamojo adresas. Kaip ir įprasti kintamieji, rodyklės turi duomenų tipą. Pvz., Sveiko skaičiaus rodyklėje gali būti sveikojo tipo kintamojo adresas. Ženklų tipo žymeklyje gali būti simbolių tipo kintamojo adresas.

Rodyklę turėtumėte pamatyti kaip simbolinį atminties adreso vaizdą. Naudodamiesi rodyklėmis, programos gali imituoti skambučius pagal nuorodas. Jie taip pat gali kurti ir manipuliuoti dinaminėmis duomenų struktūromis. C ++ rodyklės kintamasis reiškia kintamąjį, nurodantį konkretų adresą atmintyje, kurį rodo kitas kintamasis.

Šioje C ++ pamokoje sužinosite:

  • Kas yra rodyklės?
  • Adresai C ++
  • Rodyklės deklaracijos sintaksė
  • Etaloninis operatorius (ir) ir referencinis operatorius (*)
  • Rodyklės ir masyvai
  • NULL žymeklis
  • Kintamųjų rodyklės
  • Rodyklių taikymas
  • Rodyklių naudojimo pranašumai

Adresai C ++

Norėdami suprasti C ++ rodykles, turite suprasti, kaip kompiuteriai saugo duomenis.

Kai sukuriate kintamąjį savo C ++ programoje, jam yra skirta šiek tiek vietos kompiuterio atmintyje. Šio kintamojo vertė saugoma priskirtoje vietoje.

Norėdami sužinoti vietą kompiuterio atmintyje, kurioje saugomi duomenys, C ++ pateikia & (nuoroda) operatorių. Operatorius pateikia adresą, kurį užima kintamasis.

Pvz., Jei x yra kintamasis, & x pateikia kintamojo adresą.

Rodyklės deklaracijos sintaksė

C ++ deklaravimui taikoma tokia sintaksė:

datatype *variable_name;
  • Duomenų tipas yra pagrindinis rodyklės tipas, kuris turi būti galiojantis C ++ duomenų tipas.
  • Kintamasis_pavadinimas turi būti rodyklės kintamojo pavadinimas.
  • Žvaigždutė, aukščiau naudojama žymeklio deklaravimui, yra panaši į žvaigždutę, naudojamą daugybos operacijai atlikti. Tai yra žvaigždutė, žyminti kintamąjį kaip rodyklę.

Štai galiojančių žymeklio deklaracijų C ++ pavyzdys:

int *x; // a pointer to integerdouble *x; // a pointer to doublefloat *x; // a pointer to floatchar *ch // a pointer to a character

Etaloninis operatorius (ir) ir referencinis operatorius (*)

Referencinis operatorius (&) grąžina kintamojo adresą.

Dereference operatorius (*) padeda mums gauti vertę, kuri buvo išsaugota atminties adrese.

Pavyzdžiui:

Jei mes turime kintamąjį, kurio vardas yra numeris, saugomas adresu 0x234 ir saugomas 28 reikšmė.

Referencinis operatorius (&) grąžins 0x234.

Dereference operatorius (*) grąžins 5.

1 pavyzdys:

#include using namespace std;int main() {int x = 27;int *ip;ip = &x;cout << "Value of x is : ";cout << x << endl;cout << "Value of ip is : ";cout << ip<< endl;cout << "Value of *ip is : ";cout << *ip << endl;return 0;}

Išvestis:

Kaip tai veikia:

Čia yra kodo ekrano kopija:

Kodo paaiškinimas:

  1. Importuokite „iostream“ antraštės failą. Tai leis mums naudoti antraštės faile apibrėžtas funkcijas negavus klaidų.
  2. Įtraukite standartinę vardų sritį, kad galėtumėte naudoti jos klases jos nepaskambinę.
  3. Iškvieskite pagrindinę () funkciją. Programos logika turėtų būti įtraukta į šios funkcijos tekstą. {Žymi funkcijos kūno pradžią.
  4. Paskelbkite sveiko skaičiaus kintamąjį x ir priskirkite jam 27 reikšmę.
  5. Paskelbkite rodyklės kintamąjį * ip.
  6. Kintamojo x adresą įrašykite žymeklio kintamajame.
  7. Atsispausdinkite tekstą konsolėje.
  8. Ekrane atspausdinkite kintamojo x vertę.
  9. Atsispausdinkite tekstą konsolėje.
  10. Atspausdinkite kintamojo x adresą. Adreso vertė buvo išsaugota kintamajame ip.
  11. Atsispausdinkite tekstą konsolėje.
  12. Spausdinti žymeklio adresu saugomos vertės reikšmę.
  13. Sėkmingai įvykdžius, programa turėtų grąžinti vertę.
  14. Pagrindinės () funkcijos kūno pabaiga.

Rodyklės ir masyvai

Masyvai ir rodyklės veikia pagal susijusią koncepciją. Dirbant su masyvais, turinčiais rodykles, reikia atkreipti dėmesį į skirtingus dalykus. Masyvo pavadinimas pats reiškia pagrindinį masyvo adresą. Tai reiškia, kad norėdami žymekliui priskirti masyvo adresą, neturėtumėte naudoti ampersendo (&).

Pavyzdžiui:

p = arr;

Tai yra teisinga, nes „arr“ reiškia masyvų adresą. Štai dar vienas pavyzdys:

p = &arr;

Tai neteisinga.

Galime netiesiogiai paversti masyvą žymekliu. Pavyzdžiui:

int arr [20];int * ip;

Žemiau yra galiojanti operacija:

ip = arr;

Po pirmiau pateiktos deklaracijos „ip“ ir „arr“ bus lygiaverčiai ir jie dalinsis savybėmis. Tačiau „ip“ galima priskirti kitą adresą, tačiau mes negalime nieko priskirti „arr“.

2 pavyzdys:

Šis pavyzdys parodo, kaip perkelti masyvą naudojant rodykles:

#include using namespace std;int main() {int *ip;int arr[] = { 10, 34, 13, 76, 5, 46 };ip = arr;for (int x = 0; x < 6; x++) {cout << *ip << endl;ip++;}return 0;}

Išvestis:

Čia yra kodo ekrano kopija:

Kodo paaiškinimas:

  1. Paskelbkite sveiko skaičiaus rodiklio kintamąjį ip.
  2. Paskelbkite masyvą, pavadintą arr, ir jame išsaugokite 6 sveikus skaičius.
  3. Priskirkite „arr“ prie „ip“. IP ir arr taps lygiaverčiai.
  4. Sukurkite kilpą. Kilpos kintamasis x buvo sukurtas norint pakartoti masyvo elementus nuo 0 iki 5 indekso.
  5. Atspausdinkite reikšmes, saugomas rodyklės IP adresu. Viena vertė bus grąžinta per kartojimą ir iš viso bus atlikti 6 pakartojimai. Pabaiga yra C ++ raktinis žodis, kuris reiškia pabaigos eilutę. Šis veiksmas leidžia perkelti žymeklį į kitą eilutę po to, kai bus išspausdinta kiekviena vertė. Kiekviena vertė bus atspausdinta atskiroje eilutėje.
  6. Norėdami perkelti žymeklį į kitą int padėtį po kiekvienos iteracijos.
  7. Kilpos pabaiga.
  8. Sėkmingai ją vykdžius, programa turi ką nors grąžinti.
  9. Pagrindinės () funkcijos kūno pabaiga.

NULL žymeklis

Jei nėra tikslaus adreso, kurį reikia priskirti, žymeklio kintamajam gali būti priskirtas NULL. Tai turėtų būti padaryta deklaravimo metu. Toks rodyklė yra žinoma kaip nulio rodyklė. Jo vertė lygi nuliui ir yra apibrėžta daugelyje standartinių bibliotekų, pvz., „Iostream“.

3 pavyzdys:

#include using namespace std;int main() {int *ip = NULL;cout << "Value of ip is: " << ip;return 0;}

Išvestis:

Čia yra kodo ekrano kopija:

Kodo paaiškinimas:

  1. Paskelbkite rodyklės kintamąjį ip ir priskirkite jam NULL reikšmę.
  2. Spausdinti žymeklio kintamojo ip vertę šalia teksto konsolėje.
  3. Sėkmingai baigus, programa turi grąžinti vertę.
  4. Pagrindinės () funkcijos kūno pabaiga.

Kintamųjų rodyklės

Naudodami C ++, galite manipuliuoti duomenimis tiesiogiai iš kompiuterio atminties.

Atminties erdvę galima priskirti arba priskirti iš naujo, jei norite. Tai padaryti leidžia žymeklio kintamieji.

Rodyklės kintamieji nurodo konkretų adresą kompiuterio atmintyje, kurį nurodo kitas kintamasis.

Tai galima deklaruoti taip:

int *p;

Arba

int* p;

Jūsų pavyzdyje mes deklaravome rodyklės kintamąjį p.

Jame bus atminties adresas.

Žvaigždutė yra nukrypimų operatorius, kuris reiškia rodyklę į.

Rodyklė p rodo sveiko skaičiaus vertę atminties adrese.

4 pavyzdys:

#include using namespace std;int main() {int *p, x = 30;p = &x;cout << "Value of x is: " << *p;return 0;}

Išvestis:

Čia yra kodo ekrano kopija:

Kodo paaiškinimas:

  1. Paskelbkite rodiklio kintamąjį p ir kintamąjį x, kurio vertė yra 30.
  2. Priskirkite kintamojo x adresą p.
  3. Atsispausdinkite žymeklio kintamojo p reikšmę šalia teksto konsolėje.
  4. Sėkmingai baigus, programa turi grąžinti vertę.
  5. Pagrindinės () funkcijos kūno pabaiga.

Rodyklių taikymas

Funkcijos C ++ gali pateikti tik vieną reikšmę. Be to, visi kintamieji, deklaruoti funkcijoje, yra priskirti funkcijos iškvietimo kaminui. Kai tik funkcija grįžta, visi kamino kintamieji sunaikinami.

Funkcijos argumentai perduodami pagal vertę, o bet koks kintamųjų pakeitimas nepakeičia tikrųjų perduotų kintamųjų vertės. Šis pavyzdys padeda iliustruoti šią sampratą:

5 pavyzdys:

#include using namespace std;void test(int*, int*);int main() {int a = 5, b = 5;cout << "Before changing: << endl;cout << "a = " << a << endl;cout << "b = " << b << endl;test(&a, &b);cout << "\nAfter changing" << endl;cout << "a = " << a << endl;cout << "b = " << b << endl;return 0;}void test(int* n1, int* n2) {*n1 = 10;*n2 = 11;}

Išvestis:

Čia yra kodo ekrano kopija:

Kodo paaiškinimas:

  1. Sukurkite funkcijos, pavadintos test, prototipą, kuris atliks du sveiko skaičiaus parametrus.
  2. Iškvieskite pagrindinę () funkciją. Pridėsime programos logiką jos kūne.
  3. Paskelbkite du sveikųjų skaičių kintamuosius a ir b, kurių kiekvieno vertė yra 5.
  4. Atsispausdinkite tekstą konsolėje. Pabaiga (pabaigos eilutė) perkels žymeklį ir pradės spausdinti kitoje eilutėje.
  5. Atsispausdinkite kintamojo a reikšmę konsolėje kartu su kitu tekstu. Pabaiga (pabaigos eilutė) perkels žymeklį ir pradės spausdinti kitoje eilutėje.
  6. Atsispausdinkite kintamojo b reikšmę konsolėje kartu su kitu tekstu. Pabaiga (pabaigos eilutė) perkels žymeklį ir pradės spausdinti kitoje eilutėje.
  7. Sukurkite funkciją, pavadintą test (), kurios parametrai yra kintamųjų a ir b adresai.
  8. Atsispausdinkite tekstą konsolėje. Prieš spausdindami tekstą, \ n sukurs naują tuščią eilutę. Pabaiga (pabaigos eilutė) perkels žymeklį ir pradės spausdinti kitoje eilutėje, kai bus išspausdintas tekstas.
  9. Atsispausdinkite kintamojo a reikšmę konsolėje kartu su kitu tekstu. Pabaiga (pabaigos eilutė) perkels žymeklį ir pradės spausdinti kitoje eilutėje.
  10. Atsispausdinkite kintamojo b reikšmę konsolėje kartu su kitu tekstu. Pabaiga (pabaigos eilutė) perkels žymeklį ir pradės spausdinti kitoje eilutėje.
  11. Sėkmingai baigus, programa turi grąžinti vertę.
  12. Pagrindinės () funkcijos kūno pabaiga.
  13. Funkcijos testo () apibrėžimas. Funkcijoje turėtų būti du sveikojo rodiklio kintamieji * n1 ir * n2.
  14. Žymiklio kintamojo * n1 priskyrimas yra 10.
  15. Žymiklio kintamajam * n2 priskiriant vertę 11.
  16. Funkcijos testo kūno pabaiga ().

Nors funkcijos teste kintamiesiems a ir b priskiriamos naujos reikšmės, pasibaigus funkcijos iškvietimui, išorinės funkcijos pagrindinė dalis neatspindi to paties.

Rodyklių naudojimas kaip funkcijos argumentų padeda perduoti kintamojo faktinį adresą funkcijoje, o visi kintamajam atlikti pakeitimai atsispindės išorinėje funkcijoje.

Minėtu atveju funkcija „test“ turi kintamųjų „a“ ir „b“ adresą. Šie du kintamieji yra tiesiogiai prieinami naudojant funkciją „testas“, todėl bet koks šių kintamųjų pakeitimas atsispindi skambinančiojo funkcijoje „main“.

Rodyklių naudojimo pranašumai

Čia yra „Pointers“ naudojimo privalumai / privalumai

  • Rodyklės yra kintamieji, kuriuose C ++ saugomi kitų kintamųjų adresai.
  • Daugiau nei vieną kintamąjį galima modifikuoti ir grąžinti naudojant funkciją naudojant rodykles.
  • Atmintį galima dinamiškai paskirstyti ir išskirti naudojant rodykles.
  • Rodyklės padeda supaprastinti programos sudėtingumą.
  • Programos vykdymo greitis pagerėja naudojant rodykles.

Santrauka:

  • Rodyklė nurodo kito kintamojo kintamojo laikymo adresą.
  • Kiekvienas žymeklis turi galiojantį duomenų tipą.
  • Rodyklė yra simbolinis atminties adreso atvaizdavimas.
  • Rodyklės leidžia programoms imituoti skambučius pagal nuorodas ir kurti bei valdyti dinamines duomenų struktūras.
  • Masyvuose ir rodyklėse naudojama susijusi sąvoka.
  • Masyvo pavadinimas žymi masyvo bazę.
  • Jei norite žymikliui priskirti masyvo adresą, nenaudokite ampersendo (&).
  • Jei nėra konkretaus adreso, kuris priskirtų rodiklio kintamąjį, priskirkite jam NULL.