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ä