Kaj so kazalci?
V jeziku C ++ se kazalnik nanaša na spremenljivko, ki vsebuje naslov druge spremenljivke. Tako kot običajne spremenljivke imajo tudi kazalci podatkovni tip. Kazalec tipa integer na primer lahko vsebuje naslov spremenljivke vrste integer. Kazalec tipa znaka lahko vsebuje naslov spremenljivke znakovnega tipa.
Kazalec bi morali videti kot simbolično predstavitev pomnilniškega naslova. S kazalci lahko programi simulirajo klic po referenci. Lahko tudi ustvarjajo in manipulirajo z dinamičnimi podatkovnimi strukturami. V jeziku C ++ se kazalna spremenljivka nanaša na spremenljivko, ki kaže na določen naslov v pomnilniku, ki ga kaže druga spremenljivka.
V tej vadnici C ++ boste izvedeli:
- Kaj so kazalci?
- Naslovi v jeziku C ++
- Sintaksa izjave kazalca
- Referenčni operater (&) in Deference operator (*)
- Kazalci in nizi
- NULL kazalec
- Kazalci na spremenljivke
- Uporaba kazalcev
- Prednosti uporabe kazalcev
Naslovi v jeziku C ++
Če želite razumeti kazalce C ++, morate razumeti, kako računalniki shranjujejo podatke.
Ko v programu C ++ ustvarite spremenljivko, ji dodeli nekaj prostora v pomnilniku računalnika. Vrednost te spremenljivke je shranjena na dodeljenem mestu.
Če želite vedeti, kje v računalniškem pomnilniku so shranjeni podatki, ponuja C ++ operater & (reference). Operator vrne naslov, ki ga zavzame spremenljivka.
Če je na primer spremenljivka x, & x vrne naslov spremenljivke.
Sintaksa izjave kazalca
Izjava C ++ ima naslednjo sintakso:
datatype *variable_name;
- Podatkovni tip je osnovni tip kazalca, ki mora biti veljaven podatkovni tip C ++.
- Ime_premenljivke bi moralo biti ime spremenljivke kazalca.
- Zvezdica, uporabljena zgoraj za deklariranje kazalca, je podobna zvezdici, ki se uporablja za množenje. Zvezdica je tista, ki spremenljivko označi kot kazalec.
Tu je primer veljavnih deklaracij kazalcev v jeziku C ++:
int *x; // a pointer to integerdouble *x; // a pointer to doublefloat *x; // a pointer to floatchar *ch // a pointer to a character
Referenčni operater (&) in Deference operator (*)
Referenčni operater (&) vrne naslov spremenljivke.
Operator razporejanja (*) nam pomaga pridobiti vrednost, ki je bila shranjena v pomnilniškem naslovu.
Na primer:
Če imamo spremenljivko z imenom num, ki je shranjena v naslovu 0x234 in hrani vrednost 28.
Referenčni operater (&) bo vrnil 0x234.
Operator preusmeritve (*) bo vrnil 5.
Primer 1:
#includeusing 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;}
Izhod:
Kako to deluje:
Tu je posnetek zaslona kode:
Razlaga kode:
- Uvozite datoteko glave iostream. To nam bo omogočilo uporabo funkcij, opredeljenih v glavi datoteke, ne da bi prišlo do napak.
- Vključite imenski prostor std za uporabo njegovih razredov, ne da bi ga poklicali.
- Pokličite glavno funkcijo. V telo te funkcije je treba dodati programsko logiko. Znak {označuje začetek telesa funkcije.
- Navedite celoštevilčno spremenljivko x in ji dodelite vrednost 27.
- Navedite kazalec spremenljivke * ip.
- Naslov spremenljivke x shranite v spremenljivko kazalca.
- Na konzolo natisnite nekaj besedila.
- Natisnite vrednost spremenljivke x na zaslon.
- Na konzolo natisnite nekaj besedila.
- Natisnite naslov spremenljivke x. Vrednost naslova je bila shranjena v spremenljivki ip.
- Na konzolo natisnite nekaj besedila.
- Vrednost izpisa, shranjena na naslovu kazalca.
- Program mora vrniti vrednost ob uspešni izvedbi.
- Konec telesa glavne () funkcije.
Kazalci in nizi
Nizi in kazalci delujejo na podlagi sorodnega koncepta. Pri delu z nizi, ki imajo kazalce, je treba upoštevati različne stvari. Samo ime polja označuje osnovni naslov matrike. To pomeni, da za dodelitev naslova matrike kazalcu ne smete uporabljati znaka & (&).
Na primer:
p = arr;
Zgoraj je pravilno, saj arr predstavlja naslov nizov. Tu je še en primer:
p = &arr;
Zgornje je napačno.
Polje lahko implicitno pretvorimo v kazalec. Na primer:
int arr [20];int * ip;
Spodaj je veljavna operacija:
ip = arr;
Po zgornji izjavi bosta ip in arr enakovredna in si bosta delili lastnosti. Vendar lahko ip dodeli drug naslov, vendar ne moremo ničesar dodeliti arr.
2. primer:
Ta primer prikazuje, kako preiti matriko s kazalci:
#includeusing 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;}
Izhod:
Tu je posnetek zaslona kode:
Razlaga kode:
- Navedite celoštevilčno spremenljivko kazalca ip.
- Prijavite polje z imenom arr in vanj shranite 6 celih števil.
- Ip dodeli arr. IP in arr bosta enakovredna.
- Ustvari zanko za. Spremenljivka zanke x je bila ustvarjena za iteracijo nad elementi matrike od indeksa 0 do 5.
- Natisnite vrednosti, shranjene na naslovu IP kazalca. Vrnjena bo ena vrednost na iteracijo in opravljenih bo skupno 6 ponovitev. Endl je ključna beseda C ++, ki pomeni končno vrstico. S tem dejanjem lahko kazalko premaknete v naslednjo vrstico po tiskanju vsake vrednosti. Vsaka vrednost bo natisnjena v posamezni vrstici.
- Če želite kazalec premakniti v naslednji položaj int po vsaki ponovitvi.
- Konec zanke for.
- Program mora po uspešni izvedbi nekaj vrniti.
- Konec telesa glavne () funkcije.
NULL kazalec
Če ni natančnega naslova, ki bi ga bilo treba dodeliti, lahko spremenljivki kazalca dodelite NULL. To je treba storiti med izjavo. Tak kazalec je znan kot ničelni kazalec. Njegova vrednost je enaka nič in je definirana v številnih standardnih knjižnicah, kot je iostream.
3. primer:
#includeusing namespace std;int main() {int *ip = NULL;cout << "Value of ip is: " << ip;return 0;}
Izhod:
Tu je posnetek zaslona kode:
Razlaga kode:
- Navedite spremenljivko kazalca ip in ji dodelite vrednost NULL.
- Natisni vrednost kazalke spremenljivke ip poleg besedila na konzoli.
- Program mora po uspešnem zaključku vrniti vrednost.
- Konec telesa glavne () funkcije.
Kazalci na spremenljivke
S programom C ++ lahko s podatki upravljate neposredno iz pomnilnika računalnika.
Prostor za pomnilnik lahko dodelite ali znova dodelite po želji. To omogočajo kazalec spremenljivke.
Kazalne spremenljivke kažejo na določen naslov v pomnilniku računalnika, na katerega kaže druga spremenljivka.
Lahko se prijavi na naslednji način:
int *p;
Ali,
int* p;
V vašem primeru smo razglasili kazalno spremenljivko p.
Vseboval bo pomnilniški naslov.
Zvezdica je operater preusmeritve, ki pomeni kazalec na.
Kazalec p kaže na celoštevilčno vrednost v naslovu pomnilnika.
Primer 4:
#includeusing namespace std;int main() {int *p, x = 30;p = &x;cout << "Value of x is: " << *p;return 0;}
Izhod:
Tu je posnetek zaslona kode:
Razlaga kode:
- Navedite spremenljivko kazalca p in spremenljivko x z vrednostjo 30.
- Naslov spremenljivke x dodelite p.
- Natisnite vrednost spremenljivke kazalca p poleg besedila na konzoli.
- Program mora po uspešnem zaključku vrniti vrednost.
- Konec telesa glavne () funkcije.
Uporaba kazalcev
Funkcije v C ++ lahko vrnejo samo eno vrednost. Nadalje so vse spremenljivke, deklarirane v funkciji, dodeljene v skladu klicev funkcije. Takoj, ko se funkcija vrne, se vse spremenljivke sklada uničijo.
Argumenti za funkcijo se posredujejo po vrednosti in kakršna koli sprememba spremenljivk ne spremeni vrednosti dejansko posredovanih spremenljivk. Naslednji primer pomaga ponazoriti ta koncept:
Primer 5:
#includeusing 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;}
Izhod:
Tu je posnetek zaslona kode:
Razlaga kode:
- Ustvarite prototip funkcije z imenom test, ki bo zajela dva celoštevilna parametra.
- Pokličite glavno funkcijo. V njegovo telo bomo dodali programsko logiko.
- Navedite dve celoštevilčni spremenljivki a in b, vsaka z vrednostjo 5.
- Na konzolo natisnite nekaj besedila. Endl (končna vrstica) premakne kurzor, da začne tiskati v naslednji vrstici.
- Na konzolo poleg drugega besedila natisnite vrednost spremenljivke a. Endl (končna vrstica) premakne kurzor, da začne tiskati v naslednji vrstici.
- Na konzolo poleg drugega besedila natisnite vrednost spremenljivke b. Endl (končna vrstica) premakne kurzor, da začne tiskati v naslednji vrstici.
- Ustvarite funkcijo z imenom test (), ki za parametre zajema naslove spremenljivk a in b.
- Na konzolo natisnite nekaj besedila. \ N bo ustvaril novo prazno vrstico, preden bo besedilo natisnjeno. Endl (končna vrstica) premakne kurzor, da začne tiskati v naslednji vrstici po tiskanju besedila.
- Na konzolo poleg drugega besedila natisnite vrednost spremenljivke a. Endl (končna vrstica) premakne kurzor, da začne tiskati v naslednji vrstici.
- Na konzolo poleg drugega besedila natisnite vrednost spremenljivke b. Endl (končna vrstica) premakne kurzor, da začne tiskati v naslednji vrstici.
- Program mora po uspešnem zaključku vrniti vrednost.
- Konec telesa glavne () funkcije.
- Določitev preizkusa funkcije (). Funkcija mora zajeti dve celoštevilčni spremenljivki kazalca * n1 in * n2.
- Dodelitev kazalni spremenljivki * n1 vrednost 10.
- Dodelitvi spremenljivke kazalca * n2 vrednost 11.
- Konec telesa preizkusa funkcije ().
Kljub temu, da sta spremenljivki a in b znotraj preizkusa funkcije dodeljene nove vrednosti, se po končanem klicu funkcije to ne odraža v glavni funkciji zunanje funkcije.
Uporaba kazalcev kot argumentov funkcije pomaga prenesti dejanski naslov spremenljivke v funkcijo, vse spremembe, ki se izvedejo na spremenljivki, pa se bodo odražale v zunanji funkciji.
V zgornjem primeru ima funkcija 'test' naslov spremenljivke 'a' in 'b.' Ti dve spremenljivki sta neposredno dostopni iz funkcije 'test', zato se vsaka sprememba teh spremenljivk odraža v funkciji klicatelja 'main'.
Prednosti uporabe kazalcev
Tu so prednosti / prednosti uporabe kazalcev
- Kazalci so spremenljivke, ki shranjujejo naslov drugih spremenljivk v jeziku C ++.
- Funkcija lahko s kazalci spremeni in vrne več kot eno spremenljivko.
- Pomnilnik je mogoče dinamično dodeliti in odstraniti z uporabo kazalcev.
- Kazalci pomagajo pri poenostavitvi zapletenosti programa.
- Hitrost izvajanja programa se izboljša z uporabo kazalcev.
Povzetek:
- Kazalec se nanaša na spremenljivko, ki vsebuje naslov druge spremenljivke.
- Vsak kazalec ima veljaven podatkovni tip.
- Kazalec je simbolična predstavitev pomnilniškega naslova.
- Kazalci omogočajo programom, da simulirajo klic po referenci ter ustvarjajo in manipulirajo dinamične podatkovne strukture.
- Polja in kazalci uporabljajo soroden koncept.
- Ime polja označuje osnovo polja.
- Če želite kazalcu dodeliti naslov matrike, ne uporabljajte znaka & (&).
- Če ni določenega naslova za dodelitev spremenljivke kazalca, mu dodelite NULL.