logo

C – Osoittimesta osoittimeen (kaksoisosoitin)

Edellytys: Osoittimet C:ssä

Osoitinta C:ssä olevaan osoittimeen käytetään, kun halutaan tallentaa toisen osoittimen osoite. Ensimmäistä osoitinta käytetään muuttujan osoitteen tallentamiseen. Ja toista osoitinta käytetään tallentamaan ensimmäisen osoittimen osoite. Siksi ne tunnetaan myös nimellä kaksoisosoittimia . Voimme käyttää osoitinta osoittimeen muuttaaksemme normaalien osoittimien arvoja tai luoda muuttuvan kokoisen 2-D-taulukon. Kaksoisosoitin vie saman verran tilaa muistipinossa kuin tavallinen osoitin.

Osoittimen julistus osoittimeen C:ssä

Osoittimen määrittäminen osoittimeksi on samanlaista kuin osoittimen ilmoittaminen C:ssä. Erona on, että meidän on sijoitettava ylimääräinen '*' ennen osoittimen nimeä.



vastustaa jsonia javassa
data_type_of_pointer **name_of_variable = & normal_pointer_variable;>
int val = 5; int *ptr = &val; // storing address of val to pointer ptr. int **d_ptr = &ptr; // pointer to a pointer declared  // which is pointing to an integer.>

Yllä oleva kaavio näyttää osoittimen muistiesityksen osoittimeen. Ensimmäinen osoitin ptr1 tallentaa muuttujan osoitteen ja toinen osoitin ptr2 tallentaa ensimmäisen osoittimen osoitteen.

Esimerkki kaksoisosoittimesta C:ssä

C




// C program to demonstrate pointer to pointer> #include> int> main()> {> >int> var = 789;> >// pointer for var> >int>* ptr2;> >// double pointer for ptr2> >int>** ptr1;> >// storing address of var in ptr2> >ptr2 = &var;> >// Storing address of ptr2 in ptr1> >ptr1 = &ptr2;> >// Displaying value of var using> >// both single and double pointers> >printf>(>'Value of var = %d '>, var);> >printf>(>'Value of var using single pointer = %d '>, *ptr2);> >printf>(>'Value of var using double pointer = %d '>, **ptr1);> >return> 0;> }>

>

>

Lähtö

Value of var = 789 Value of var using single pointer = 789 Value of var using double pointer = 789>

Kuinka kaksoisosoitin toimii?

ero leijonan ja tiikerin välillä

Kaksoisosoittimen toiminta voidaan selittää yllä olevan kuvan avulla:

  • Kaksoisosoitin on ilmoitettu käyttämällä yllä näkyvää syntaksia.
  • Tämän jälkeen tallennamme toisen osoittimen osoitteen tämän uuden kaksoisosoittimen arvoksi.
  • Nyt, jos haluamme manipuloida tai jättää viittauksen johonkin sen tasosta, meidän on käytettävä Asterisk ( * ) -operaattoria, kuinka monta kertaa haluamme mennä alaspäin.

Osoittimen koko osoittimeen C

C-ohjelmointikielessä kaksoisosoitin käyttäytyy samalla tavalla kuin normaali C:n osoitin. Kaksoisosoitinmuuttujan koko on siis aina yhtä suuri kuin normaalit osoittimet. Voimme varmistaa tämän käyttämällä alla olevaa C-ohjelmaa.

Esimerkki 1: C Ohjelma, joka selvittää osoittimen koon.

C




// C program to find the size of pointer to pointer> #include> int> main()> {> >// defining single and double pointers> >int> a = 5;> >int>* ptr = &a;> >int>** d_ptr = &ptr;> >// size of single pointer> >printf>(>' Size of normal Pointer: %d '>,>sizeof>(ptr));> >// size of double pointer> >printf>(>' Size of Double Pointer: %d '>,>sizeof>(d_ptr));> >return> 0;> }>

>

>

Lähtö

 Size of normal Pointer: 8 Size of Double Pointer: 8>

Huomautus: Yllä olevan koodin tulos riippuu myös käytetyn koneen tyypistä. Osoittimen koko ei ole kiinteä C-ohjelmointikielessä ja se riippuu muista tekijöistä, kuten suorittimen arkkitehtuurista ja käytetystä käyttöjärjestelmästä. Yleensä 64-bittisessä käyttöjärjestelmässä koko on 8 tavua ja 32-bittisessä käyttöjärjestelmässä 4 tavua.

Kaksoisosoittimien käyttö C:ssä

Seuraavassa on osoittimen osoittimiin tärkeimmät käyttötavat C:ssä:

  • Niitä käytetään moniulotteisten taulukoiden dynaamiseen muistin varaamiseen.
  • Niitä voidaan käyttää monitasoisten tietojen, kuten tekstidokumentin kappaleiden, lauseiden ja sanan semantiikan tallentamiseen.
  • Niitä käytetään tietorakenteissa suoraan manipuloimaan solmujen osoitetta kopioimatta.
  • Niitä voidaan käyttää funktion argumentteina paikalliseen osoittimeen tallennettua osoitetta käsittelemään.

Monitasoiset osoittimet C:ssä

Kaksoisosoittimet eivät ole ainoita C-kielen tukemia monitasoisia osoittimia. Entä jos haluamme muuttaa kaksoisosoittimen arvoa?

Tässä tapauksessa voimme käyttää kolmoisosoitinta, joka on osoitin osoittimeen, eli int ***t_ptr.

Kolmoisosoittimen syntaksi

  pointer_type *** pointer_name;>

Samoin kolmoisosoittimen arvon muuttamiseksi voimme käyttää osoitinta osoittimeen osoittimeen (Four level Pointer). Toisin sanoen voidaan sanoa, että tason – x muuttujan arvon muuttamiseksi voimme käyttää tasoa – x+1 osoitinta. Ja tätä käsitettä voidaan laajentaa edelleen.

staattinen avainsana javassa

Huomautus : Voimme käyttää mitä tahansa tasoosoitinta C:ssä. Siinä ei ole rajoituksia, mutta se tekee ohjelmasta erittäin monimutkaisen ja altis virheille.

Täytyy lukea - Toimintoosoitin C:ssä