C ++ -osoittimet esimerkkejä

Sisällysluettelo:

Anonim

Mitä ovat viitteet?

Kohdassa C ++ osoitin viittaa muuttujaan, joka pitää sisällään toisen muuttujan osoitteen. Kuten tavallisissa muuttujissa, osoittimilla on tietotyyppi. Esimerkiksi kokonaislukutyyppinen osoitin voi sisältää tyypin kokonaisluku muuttujan osoitteen. Merkityypin osoitin voi sisältää merkkityyppisen muuttujan osoitteen.

Sinun pitäisi nähdä osoitin symbolisena esityksenä muistiosoitteesta. Osoittimien avulla ohjelmat voivat simuloida kutsu-viitteitä. Ne voivat myös luoda ja käsitellä dynaamisia tietorakenteita. Kohdassa C ++ osoitinmuuttuja viittaa muuttujaan, joka osoittaa tiettyyn osoitteeseen muistissa, johon toinen muuttuja osoittaa.

Tässä C ++ -opetusohjelmassa opit:

  • Mitä ovat viitteet?
  • Osoitteet muodossa C ++
  • Osoittimen ilmoituksen syntakse
  • Viiteoperaattori (&) ja viiteoperaattori (*)
  • Osoittimet ja taulukot
  • NULL osoitin
  • Muuttujien osoittimet
  • Osoittimien käyttö
  • Osoittimien käytön edut

Osoitteet muodossa C ++

C ++ -osoittimien ymmärtämiseksi sinun on ymmärrettävä, kuinka tietokoneet tallentavat tietoja.

Kun luot muuttujan C ++ -ohjelmaan, sille annetaan jonkin verran tilaa tietokoneen muistiin. Tämän muuttujan arvo tallennetaan määritettyyn sijaintiin.

Tietääksesi muistin sijainnin tietokoneen muistissa, C ++ tarjoaa & (viite) -operaattorin. Operaattori palauttaa osoitteen, jonka muuttuja käyttää.

Esimerkiksi, jos x on muuttuja, & x palauttaa muuttujan osoitteen.

Osoittimen ilmoituksen syntakse

C ++: n ilmoituksessa käytetään seuraavaa syntaksia:

datatype *variable_name;
  • Tietotyyppi on osoittimen perustyyppi, jonka on oltava kelvollinen C ++ -tietotyyppi.
  • Muuttujan_nimen on oltava osoittimen muuttujan nimi.
  • Yllä oleva osoitinilmoituksessa käytetty tähti on samanlainen kuin tähti, jota käytetään kertotoiminnon suorittamiseen. Tähti merkitsee muuttujan osoittimeksi.

Tässä on esimerkki kelvollisista osoitinlausekkeista C ++: ssa:

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

Viiteoperaattori (&) ja viiteoperaattori (*)

Viiteoperaattori (&) palauttaa muuttujan osoitteen.

Poikkeamaoperaattori (*) auttaa meitä saamaan muistiosoitteeseen tallennetun arvon.

Esimerkiksi:

Jos meillä on muuttuja, jonka nimi on numero, on tallennettu osoitteeseen 0x234 ja tallentaa arvon 28.

Viiteoperaattori (&) palauttaa arvon 0x234.

Poikkeamaoperaattori (*) palauttaa arvon 5.

Esimerkki 1:

#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;}

Tuotos:

Kuinka tämä toimii:

Tässä on kuvakaappaus koodista:

Koodin selitys:

  1. Tuo iostream-otsikkotiedosto. Tämä antaa meille mahdollisuuden käyttää otsikkotiedostossa määriteltyjä toimintoja saamatta virheitä.
  2. Sisällytä vakio nimitila käyttääksesi luokkia kutsumatta sitä.
  3. Kutsu main () -toiminto. Ohjelmalogiikka tulisi lisätä tämän toiminnon runkoon. {Tarkoittaa funktion rungon alkua.
  4. Ilmoita kokonaisluku muuttuja x ja määritä sille arvo 27.
  5. Ilmoita osoittimen muuttuja * ip.
  6. Tallenna muuttujan x osoite osoitemuuttujaan.
  7. Tulosta tekstiä konsolille.
  8. Tulosta muuttujan x arvo näytölle.
  9. Tulosta tekstiä konsolille.
  10. Tulosta muuttujan x osoite. Osoitteen arvo tallennettiin muuttujaan ip.
  11. Tulosta tekstiä konsolille.
  12. Osoittimen osoitteeseen tallennetun tulostusarvo.
  13. Ohjelman tulisi palauttaa arvo suorituksen onnistuttua.
  14. Pääfunktion () rungon pää.

Osoittimet ja taulukot

Taulukot ja osoittimet toimivat asiaan liittyvän käsitteen perusteella. On useita asioita, jotka on huomioitava työskenneltäessä taulukoiden kanssa, joissa on osoittimet. Taulukon nimi itse tarkoittaa taulukon perusosoitetta. Tämä tarkoittaa, että taulukon osoitteen osoittamiseksi osoittimelle ei pidä käyttää ampersandia (&).

Esimerkiksi:

p = arr;

Yllä on oikein, koska arr edustaa taulukoiden osoitetta. Tässä on toinen esimerkki:

p = &arr;

Edellä on virheellistä.

Voimme implisiittisesti muuntaa taulukon osoittimeksi. Esimerkiksi:

int arr [20];int * ip;

Alla on kelvollinen toiminto:

ip = arr;

Yllä olevan ilmoituksen jälkeen ip ja arr ovat vastaavia, ja he jakavat ominaisuuksia. IP: lle voidaan kuitenkin määrittää eri osoite, mutta emme voi määrittää mitään arr: lle.

Esimerkki 2:

Tämä esimerkki osoittaa, kuinka taulukkoon voi siirtyä osoittimilla:

#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;}

Tuotos:

Tässä on kuvakaappaus koodista:

Koodin selitys:

  1. Ilmoita kokonaislukuosoittimen muuttuja ip.
  2. Ilmoita taulukko nimeltä arr ja tallenna siihen 6 kokonaislukua.
  3. Määritä arr ip: lle. IP ja arr tulevat vastaaviksi.
  4. Luo silmukka. Silmukan muuttuja x luotiin iteroimaan taulukkoelementtien yli indeksistä 0-5.
  5. Tulosta osoittimen IP-osoitteeseen tallennetut arvot. Yksi arvo palautetaan iteraatiota kohden, ja yhteensä 6 toistoa tehdään. Endl on C ++ -avainsana, joka tarkoittaa loppuriviä. Tämän toiminnon avulla voit siirtää kohdistimen seuraavalle riville jokaisen arvon tulostamisen jälkeen. Jokainen arvo tulostetaan erillisellä rivillä.
  6. Osoittimen siirtäminen seuraavaan int-asentoon jokaisen iteraation jälkeen.
  7. Silmukan loppu.
  8. Ohjelman on palautettava jotain onnistuneen suorituksen jälkeen.
  9. Pääfunktion () rungon loppu.

NULL osoitin

Jos tarkkaa osoitetta ei ole, osoitinmuuttujalle voidaan antaa NULL. Se tulisi tehdä ilmoituksen aikana. Tällainen osoitin tunnetaan nollaosoittimena. Sen arvo on nolla ja se on määritelty monissa vakiokirjastoissa, kuten iostream.

Esimerkki 3:

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

Tuotos:

Tässä on kuvakaappaus koodista:

Koodin selitys:

  1. Ilmoitetaan osoitinmuuttuja ip ja osoitetaan sille arvo NULL.
  2. Tulosta osoitinmuuttujan ip arvo jonkin tekstin vieressä konsolissa.
  3. Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
  4. Pääfunktion () rungon pää.

Muuttujien osoittimet

C ++: lla voit käsitellä tietoja suoraan tietokoneen muistista.

Muistitila voidaan määrittää tai määrittää uudelleen haluamallaan tavalla. Tämän mahdollistavat osoittimen muuttujat.

Osoitinmuuttujat osoittavat tiettyä osoitetta tietokoneen muistissa, johon toinen muuttuja osoittaa.

Se voidaan julistaa seuraavasti:

int *p;

Tai,

int* p;

Sinä esimerkissä olemme ilmoittaneet osoittimen muuttujan p.

Siinä on muistiosoite.

Tähti on poikkeamaoperaattori, joka tarkoittaa osoitinta.

Osoitin p osoittaa kokonaislukuarvoa muistiosoitteessa.

Esimerkki 4:

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

Tuotos:

Tässä on kuvakaappaus koodista:

Koodin selitys:

  1. Ilmoitetaan osoitinmuuttuja p ja muuttuja x arvolla 30.
  2. Määritä muuttujan x osoite osoitteeksi p.
  3. Tulosta osoitinmuuttujan p arvo konsolin tekstin viereen.
  4. Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
  5. Pääfunktion () rungon pää.

Osoittimien käyttö

Funktiot C ++: ssa voivat palauttaa vain yhden arvon. Lisäksi kaikki funktiossa ilmoitetut muuttujat varataan funktion kutsupinoon. Heti kun funktio palaa, kaikki pinomuuttujat tuhoutuvat.

Toimivat argumentit välitetään arvon mukaan, eikä muuttujiin tehty muutos muuta niiden todellisten muuttujien arvoa, jotka välitetään. Seuraava esimerkki auttaa havainnollistamaan tätä käsitettä: -

Esimerkki 5:

#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;}

Tuotos:

Tässä on kuvakaappaus koodista:

Koodin selitys:

  1. Luo prototyyppi funktiosta nimeltä testi, joka vie kaksi kokonaislukuparametriä.
  2. Kutsu main () -toiminto. Lisäämme ohjelmalogiikan sen runkoon.
  3. Ilmoitetaan kaksi kokonaislukumuuttujaa a ja b, joista jokaisen arvo on 5.
  4. Tulosta tekstiä konsolille. Endl (loppurivi) siirtää kohdistimen aloittaakseen tulostamisen seuraavalle riville.
  5. Tulosta muuttujan a arvo konsolille muun tekstin viereen. Endl (loppurivi) siirtää kohdistimen aloittaakseen tulostamisen seuraavalle riville.
  6. Tulosta muuttujan b arvo konsolille muun tekstin viereen. Endl (loppurivi) siirtää kohdistimen aloittaakseen tulostamisen seuraavalle riville.
  7. Luo funktio nimeltä test (), joka ottaa muuttujien a ja b osoitteet parametreiksi.
  8. Tulosta tekstiä konsolille. \ N luo uuden tyhjän rivin ennen tekstin tulostamista. Loppu (loppurivi) siirtää kohdistimen aloittaakseen tulostamisen seuraavalle riville tekstin tulostamisen jälkeen.
  9. Tulosta muuttujan a arvo konsolille muun tekstin viereen. Endl (loppurivi) siirtää kohdistimen aloittaakseen tulostamisen seuraavalle riville.
  10. Tulosta muuttujan b arvo konsolille muun tekstin viereen. Endl (loppurivi) siirtää kohdistimen aloittaakseen tulostamisen seuraavalle riville.
  11. Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
  12. Pääfunktion () rungon pää.
  13. Toimintatestin määrittely (). Funktion tulisi ottaa kaksi kokonaislukumuuttujaa * n1 ja * n2.
  14. Määritetään osoitinmuuttujalle * n1 arvo 10.
  15. Määritetään osoitinmuuttujalle * n2 arvo 11.
  16. Toimintatestin rungon pää ().

Vaikka funktion testin sisällä muuttujille a ja b määritetään uudet arvot, kun toimintokutsu on valmis, sama ei heijastu ulomman funktion pääosassa.

Osoittimien käyttäminen funktion argumentteina auttaa välittämään muuttujan todellisen osoitteen funktiossa, ja kaikki muuttujalle tehdyt muutokset heijastuvat ulkoiseen funktioon.

Edellä mainitussa tapauksessa funktiolla 'testi' on muuttujien 'a' ja 'b' osoite. Nämä kaksi muuttujaa ovat suoraan käytettävissä toiminnon 'testi' avulla, joten kaikki näihin muuttujiin tehdyt muutokset näkyvät soittajan toiminnossa 'main'.

Osoittimien käytön edut

Tässä on viitteiden käytön etuja / etuja

  • Osoittimet ovat muuttujia, jotka tallentavat muiden muuttujien osoitteet C ++: een.
  • Useampi kuin yksi muuttuja voidaan muokata ja palauttaa toiminnon avulla osoittimilla.
  • Muisti voidaan allokoida dynaamisesti osoittimilla.
  • Osoittimet auttavat yksinkertaistamaan ohjelmaa.
  • Ohjelman suoritusnopeus paranee osoittimien avulla.

Yhteenveto:

  • Osoitin viittaa muuttujan pito-osoitteeseen.
  • Jokaisella osoittimella on kelvollinen tietotyyppi.
  • Osoitin on symbolinen esitys muistiosoitteesta.
  • Osoittimien avulla ohjelmat voivat simuloida kutsu-viitteenä sekä luoda ja manipuloida dynaamisia tietorakenteita.
  • Taulukot ja osoittimet käyttävät siihen liittyvää käsitettä.
  • Taulukon nimi tarkoittaa taulukon perustaa.
  • Jos haluat määrittää taulukon osoitteen osoittimelle, älä käytä ampersandia (&).
  • Jos osoitinmuuttujalle ei ole tarkkaa osoitetta, anna sille NULL.