Condiție preliminară: Indicatori în C
Pointerul către un pointer în C este folosit când dorim să stocăm adresa altui pointer. Primul pointer este folosit pentru a stoca adresa variabilei. Iar al doilea pointer este folosit pentru a stoca adresa primului pointer. De aceea sunt cunoscute și ca indicatoare duble . Putem folosi un pointer către un pointer pentru a modifica valorile pointerilor normale sau pentru a crea o matrice 2-D de dimensiune variabilă. Un indicator dublu ocupă aceeași cantitate de spațiu în stiva de memorie ca un indicator normal.
Declarația Pointer la un Pointer în C
Declararea Pointer la Pointer este similară cu declararea unui pointer în C. Diferența este că trebuie să plasăm un „*” suplimentar înaintea numelui pointerului.
long to int java
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.>
Diagrama de mai sus arată reprezentarea în memorie a unui pointer către un pointer. Primul pointer ptr1 stochează adresa variabilei, iar al doilea pointer ptr2 stochează adresa primului pointer.
Exemplu de indicator dublu în C
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;> }> |
>
>
fișierul de schimbare linuxIeșire
Value of var = 789 Value of var using single pointer = 789 Value of var using double pointer = 789>
Cum funcționează indicatorul dublu?
Funcționarea indicatorului dublu poate fi explicată folosind imaginea de mai sus:
- Indicatorul dublu este declarat folosind sintaxa prezentată mai sus.
- După aceea, stocăm adresa altui pointer ca valoare a acestui nou indicator dublu.
- Acum, dacă vrem să manipulăm sau să dereferim la oricare dintre nivelurile sale, trebuie să folosim operatorul Asterisk ( * ) de numărul de ori în jos de la nivelul pe care vrem să mergem.
Dimensiunea pointerului la pointer în C
În limbajul de programare C, un pointer dublu se comportă în mod similar cu un pointer normal din C. Deci, dimensiunea variabilei indicator dublu este întotdeauna egală cu pointerul normal. Putem verifica acest lucru folosind programul C de mai jos.
Exemplul 1: Programul C pentru a găsi dimensiunea unui pointer către un indicator.
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;> }> |
>
>Ieșire
Size of normal Pointer: 8 Size of Double Pointer: 8>
Notă: Ieșirea codului de mai sus depinde și de tipul de mașină care este utilizată. Dimensiunea unui pointer nu este fixată în limbajul de programare C și depinde de alți factori, cum ar fi arhitectura CPU și sistemul de operare utilizat. De obicei, pentru un sistem de operare pe 64 de biți, dimensiunea va fi de 8 octeți, iar pentru un sistem de operare pe 32 de biți, dimensiunea va fi de 4 octeți.
Aplicarea indicatoarelor duble în C
Următoarele sunt principalele utilizări ale pointerului către pointeri în C:
sonu nigam
- Ele sunt utilizate în alocarea dinamică a memoriei a tablourilor multidimensionale.
- Ele pot fi folosite pentru a stoca date pe mai multe niveluri, cum ar fi paragraful documentului text, propozițiile și semantica cuvântului.
- Ele sunt utilizate în structurile de date pentru a manipula direct adresa nodurilor fără a fi copiate.
- Ele pot fi folosite ca argumente de funcție pentru a manipula adresa stocată în pointerul local.
Indicatori pe mai multe niveluri în C
Pointerii duble nu sunt singurii pointeri multinivel acceptați de limbajul C. Ce se întâmplă dacă vrem să schimbăm valoarea unui indicator dublu?
În acest caz, putem folosi un pointer triplu, care va fi un pointer către un pointer către un pointer, adică int ***t_ptr.
Sintaxa lui Triple Pointer
pointer_type *** pointer_name;>
În mod similar, pentru a schimba valoarea unui pointer triplu putem folosi un pointer către un pointer către un pointer către un pointer (Four level Pointer). Cu alte cuvinte, putem spune că pentru a modifica valoarea unei variabile de nivel – x putem folosi un indicator de nivel – x+1. Și acest concept poate fi extins și mai mult.
Notă : Putem folosi orice indicator de nivel în C. Nu există nicio restricție, dar face programul foarte complex și vulnerabil la erori.
Trebuie citit - Indicator de funcție în C