logo

Indicatorul de dereferință în C

Știm că variabila pointer poate stoca adresa de memorie în limbajul C și în acest articol, vom învăța cum să folosim acel pointer pentru a accesa datele stocate în locația de memorie indicată de indicator.

înlocuire șir de caractere javascript

Ce este un pointer?

În primul rând, revizuim ceea ce este un pointer. Un pointer este o variabilă care stochează adresa de memorie a unei alte variabile. Pointerul ne ajută să manipulăm datele din adresa de memorie pe care o indică pointerul. Mai mult, mai multe pointeri pot indica aceeași memorie.



Luați în considerare următorul exemplu,

int num = 10; int *ptr; ptr = #>

Am stocat adresa pe unu variabilă în ptr pointer, dar acum, cum să accesați valoarea stocată în memorie la adresa indicată de ptr ? Aici, dereferențiarea intră în joc.

Indicatorul de dereferință în C

Accesarea sau manipularea conținutului care este stocat în adresa de memorie indicată de pointer folosind operatorul de dereferențiere sau indirectare (*) se numește dereferențiere pointer.



Indicatorul de dereferențiere în C

Sintaxă pentru dereferențiarea unui pointer

Folosim operatorul indirect (*) ca prefix pentru a dereferenta un pointer:

 * ( pointer_name )>

Pentru modificarea datelor stocate în memorie, folosim



 * ( pointer_name ) = new_value;>

Este de remarcat faptul că new_value trebuie să fie de același tip ca și precedentul.

Luați în considerare exemplele de mai sus unde ptr arata spre dacă, t Conținutul din adresa de memorie poate fi accesat de operatorul de dereferențiere *. Acum, *ptr va prelua conținutul stocat în adresa care este 10.

Adresa și valorile memoriei num și ptr vor arăta astfel.

Variabil Adresa de memorie Valoare
num = 10 202020 10
202021
202022
202023
ptr = &num 202024 – 202032 202020

Notă: Am presupus că arhitectura din exemplul de mai sus este adresabilă pe octeți, adică unitatea minimă care are o adresă separată este un octet.

Exemple de dereferențiere pointer

Exemplul 1:

Utilizarea unui pointer pentru a accesa și modifica valoarea unei variabile întregi.

C

gimp înlocuiți culoarea




// C Program to illustrate the dereferencing of pointer> #include> int> main()> {> >// Declare integer variable number> >int> num = 10;> >// Declare pointer to store address of number> >int>* ptr = #> >// Print the value of number> >printf>(>'Value of num = %d '>, num);> >// Print Address of the number using & operator> >printf>(>'Address of num = %d '>, &num);> >// Print Address stored in the pointer> >printf>(>'Address stored in the ptr = %p '>, ptr);> >printf>(>'Dereference content in ptr using *ptr '>);> >// Access the content using * operator> >printf>(>'Value of *ptr = %d '>, *ptr);> >printf>(>'Now, *ptr is same as number '>);> >printf>(>'Modify the value using pointer to 6 '>);> >// Modify the content in the address to 6 using pointer> >*ptr = 6;> >// Print the modified value using pointer> >printf>(>'Value of *ptr = %d '>, *ptr);> >// Print the modified value using variable> >printf>(>'Value of number = %d '>, num);> >return> 0;> }>

conversia obiectului în șir
>

>

Ieșire

Value of num = 10 Address of num = 0x7ffe47d51b4c Address stored in the ptr = 0x7ffe47d51b4c Dereference content in ptr using *ptr Value of *ptr = 10 Now, *ptr is same as number Modify the value using pointer to 6 Value of *ptr = 6 Value of number = 6>

Exemplul 2: Dereferentarea indicatorului dublu

Pointerii dubli pot fi, de asemenea, dereferențiați folosind aceeași logică, dar va trebui să utilizați operatorul de indirectă de două ori: una pentru a vă deplasa la pointerul către care indică indicatorul dublu și cealaltă pentru a accesa valoarea reală.

C




// C program to dereference double pointer> #include> int> main()> {> >int> var = 10;> >int>* ptr = &var;> >// double pointer> >int>** dptr = &ptr;> >// dereferencing the double pointer> >printf>(>'Accesing value from double pointer using '> >'**dptr: %d'>,> >**dptr);> >return> 0;> }>

obiect la json în java

>

>

Ieșire

Accesing value from double pointer using **dptr: 10>

La fel, putem dereferi indicatorii de orice nivel.

Cum funcționează dereferențiarea?

Ori de câte ori cerem compilatorului să anuleze referința unui pointer, acesta face trei lucruri:

  • Mai întâi caută adresa stocată în pointer.
  • Apoi caută tipul de pointer, astfel încât să poată deduce cantitatea de memorie de citit. De exemplu, 4 byes pentru int, 1 byte pentru char, etc. Este, de asemenea, motivul principal pentru care trebuie să specificăm tipul de pointer în declarație, chiar dacă dimensiunea fiecărui pointer dintr-un sistem este aceeași.
  • În cele din urmă, citește memoria și returnează datele stocate.

Notă: Din raționamentul de mai sus, putem, de asemenea, deduce că nu putem dereferenția indicatorul gol, deoarece dimensiunea datelor către care indică este necunoscută. Așadar, trebuie să tipărim indicatorul void pentru a-l dereferi.