Voorwaarde: Wijzers in C
De pointer naar een pointer in C wordt gebruikt als we het adres van een andere pointer willen opslaan. De eerste pointer wordt gebruikt om het adres van de variabele op te slaan. En de tweede aanwijzer wordt gebruikt om het adres van de eerste aanwijzer op te slaan. Daarom worden ze ook wel genoemd dubbele wijzers . We kunnen een pointer naar een pointer gebruiken om de waarden van normale pointers te wijzigen of een 2D-array van variabele grootte te maken. Een dubbele aanwijzer neemt dezelfde hoeveelheid ruimte in de geheugenstapel in beslag als een normale aanwijzer.
Verklaring van aanwijzer naar een aanwijzer in C
Het declareren van Pointer to Pointer is vergelijkbaar met het declareren van een pointer in C. Het verschil is dat we een extra ‘*’ vóór de naam van de pointer moeten plaatsen.
naamgevingsconventie voor 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.>
Het bovenstaande diagram toont de geheugenrepresentatie van een pointer naar een pointer. De eerste pointer ptr1 slaat het adres van de variabele op en de tweede pointer ptr2 slaat het adres van de eerste pointer op.
Voorbeeld van dubbele aanwijzer in 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;> }> |
>
>Uitvoer
Value of var = 789 Value of var using single pointer = 789 Value of var using double pointer = 789>
Hoe dubbele aanwijzer werkt?
De werking van de dubbelwijzer kan worden uitgelegd aan de hand van bovenstaande afbeelding:
- De dubbele pointer wordt gedeclareerd met behulp van de hierboven weergegeven syntaxis.
- Daarna slaan we het adres van een andere pointer op als de waarde van deze nieuwe dubbele pointer.
- Als we nu een van de niveaus willen manipuleren of er niet meer naar willen verwijzen, moeten we de operator Asterisk (*) gebruiken het aantal keren dat we het niveau willen verlagen.
Grootte van aanwijzer tot aanwijzer in C
In de programmeertaal C gedraagt een dubbele pointer zich op dezelfde manier als een normale pointer in C. De grootte van de double-pointervariabele is dus altijd gelijk aan de normale pointers. We kunnen dit verifiëren met behulp van het onderstaande C-programma.
Voorbeeld 1: C-programma om de grootte van een pointer naar een pointer te vinden.
C
binaire boom versus binaire zoekboom
// 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;> }> |
>
>
rhel versus centosUitvoer
Size of normal Pointer: 8 Size of Double Pointer: 8>
Opmerking: De uitvoer van bovenstaande code is ook afhankelijk van het type machine dat wordt gebruikt. De grootte van een pointer ligt niet vast in de programmeertaal C en hangt af van andere factoren, zoals de CPU-architectuur en het gebruikte besturingssysteem. Normaal gesproken is de grootte voor een 64-bits besturingssysteem 8 bytes en voor een 32-bits besturingssysteem 4 bytes.
Toepassing van dubbele pointers in C
Hieronder volgen de belangrijkste toepassingen van pointer naar pointers in C:
- Ze worden gebruikt bij de dynamische geheugentoewijzing van multidimensionale arrays.
- Ze kunnen worden gebruikt om gegevens op meerdere niveaus op te slaan, zoals de paragraaf van het tekstdocument, zinnen en woordsemantiek.
- Ze worden gebruikt in datastructuren om het adres van de knooppunten rechtstreeks te manipuleren zonder te kopiëren.
- Ze kunnen worden gebruikt als functieargumenten om het adres te manipuleren dat is opgeslagen in de lokale aanwijzer.
Aanwijzers op meerdere niveaus in C
Double Pointers zijn niet de enige pointers op meerdere niveaus die door de C-taal worden ondersteund. Wat als we de waarde van een dubbele aanwijzer willen wijzigen?
In dit geval kunnen we een drievoudige pointer gebruiken, wat een pointer is naar een pointer naar een pointer, d.w.z. int ***t_ptr.
Syntaxis van Triple Pointer
pointer_type *** pointer_name;>
Op dezelfde manier kunnen we, om de waarde van een drievoudige aanwijzer te wijzigen, een aanwijzer naar een aanwijzer naar een aanwijzer naar een aanwijzer gebruiken (wijzer op vier niveaus). Met andere woorden, we kunnen zeggen dat we, om de waarde van een niveau-x-variabele te veranderen, een niveau-x+1-aanwijzer kunnen gebruiken. En dit concept kan verder worden uitgebreid.
Opmerking : We kunnen elke niveauaanwijzer in C gebruiken. Er zijn geen beperkingen aan, maar het maakt het programma erg complex en kwetsbaar voor fouten.
Moet lezen - Functieaanwijzer in C