Que fait ** dans la langue C?

Que fait ** dans la langue C?
** appelé pointeur double Une indirection de pointeur ou de double indirection est également connu une fonctionnalité de langue C utilisée pour fonctionner à plusieurs niveaux de mémoire à la fois. Il est utile de regarder la structure de mémoire du langage C pour comprendre comment cela fonctionne.

La mémoire d'un programme est divisée en deux parties: statique et dynamique. La mémoire statique fait référence aux variables d'une taille fixe tout au long du programme, tandis que la mémoire dynamique s'adapte à la taille des variables dont le programme a besoin. Par exemple, si un programme doit stocker un nombre variable de chaînes, la mémoire dynamique serait utilisée. En langue C, doubles pointeurs (**) sont utilisés lorsque vous travaillez avec la mémoire dynamique.

Qu'est-ce qu'un double pointeur (**)?

UN Double pointeur (**) est un pointeur qui pointe vers l'emplacement d'un autre pointeur. L'emplacement de la variable en mémoire est indiqué par ce pointeur supplémentaire. En conséquence, quand un Double pointeur (**) est affecté à une variable, deux niveaux d'adresse mémoire sont créés. Cela permet à la langue C d'accéder plus facilement à la mémoire dynamique. Sur la pile de mémoire, un Double pointeur (**) prend la même quantité de place qu'un pointeur ordinaire.

Regardons la syntaxe d'un Double pointeur (**):

data_type_of_pointer ** name_of_variable = & normal_pointer_variable;

Regardons maintenant un exemple d'utilisation Double pointeur (**) Dans un programme C.

#inclure
int main()

int Val = 36;
int * ptr1;
int ** ptr2;
ptr1 = &val;
ptr2 = &ptr1;
printf ("La valeur de Val est:% d \ n", val);
printf ("La valeur de Val en utilisant un seul pointeur est:% d \ n", * ptr1);
printf ("La valeur de Val à l'aide du double pointeur est:% d \ n", ** ptr2);
retour 0;

Nous utilisons la variable "val”Avec la valeur 36 dans le code ci-dessus. Ensuite, nous dirigeons un pointeur (PTR1) en direction du val, qui est dirigé vers un deuxième pointeur (ptr2) après. Mais les pointeurs ne modifient pas la valeur du 'val', qui reste 36.

Sortir

Doubles pointeurs (**) Dans le langage de programmation C, se comportent de manière identique à des pointeurs réguliers en C. En conséquence, le double-point (**) La taille de la variable et la taille de la variable de pointeur régulière sont toujours identiques.

#inclure
int main()

int Val = 36;
int * ptr1;
int ** ptr2;
ptr1 = &val;
ptr2 = &ptr1;
printf ("Taille du pointeur normal:% d \ n", sizeof (ptr1));
printf ("taille du double pointeur:% d \ n", sizeof (ptr2));
retour 0;

Nous utilisons la variable "val»Avec la valeur 36 de ce code. Ensuite, nous dirigeons un pointeur (PTR1) en direction du val, qui est dirigé vers un deuxième pointeur (ptr2) après. La taille des deux pointeurs est calculée, qui est identique, je.e. 8.

Sortir

Que fait ** dans la langue C?

Il existe plusieurs fonctions de doubles pointeurs qui sont mentionnés ici:

1: Accès à la mémoire dynamique

La caractéristique de doubles pointeurs (**) est ce qui permet au langage C de configurer et d'accéder à la mémoire dynamique. Pour ce faire, un pointeur est fourni avec une adresse qui correspond au premier élément d'un tableau. Le Double pointeur (**) puis pointe vers ce pointeur, permettant aux données de cet endroit d'être lues ou écrites. Au fil du programme, plus d'éléments peuvent être ajoutés au tableau à l'aide d'un Double pointeur (**).

2: Définissez un tableau de pointeur

Une autre utilisation pour doubles pointeurs (**) est de définir un tableau de pointeurs. Ceci est utile lorsque le programme doit accéder à de grandes quantités de données sans se soucier de la taille du tableau. UN Double pointeur (**) peut accéder rapidement à l'adresse de ces pointeurs, permettant au programme de traiter les données sans la peine de redimensionner le tableau chaque fois qu'une valeur est modifiée.

3: Accès à l'emplacement de l'adresse mémoire

Au niveau le plus élémentaire, le Double pointeur (**) donne simplement au programmeur l'accès à l'adresse d'un emplacement de mémoire donné. Avec cette adresse, le programmeur peut ensuite accéder à toutes les données stockées à cet emplacement, ou modifier ces données selon les besoins. Pour ce faire, le programmeur déréréence le Double pointeur (**), qui se fait en utilisant le caractère astérisque (*). En raison de l Double pointeur (**), Le programmeur est désormais en mesure d'accéder et de modifier les données d'une manière qui n'était pas avant faisable.

4: Créer des structures de données complexes

De plus, un Double pointeur (**) Peut également être utilisé pour créer des structures de données plus complexes telles que les arbres et les graphiques. Les nœuds, qui peuvent pointer vers un ou plusieurs nœuds supplémentaires et constituer une structure plus sophistiquée dans les arbres et les graphiques. Pour créer une structure aussi complexe, le programmeur doit à nouveau définir un Double pointeur (**) qui pointe vers les nœuds de la structure de données. Le Double pointeur (**) permet au programmeur d'accéder et de modifier les nœuds dans la structure d'une manière qui ne serait pas possible sans le Double pointeur (**).

Conclusion

Doubles pointeurs (**) sont une partie puissante du langage C, permettant aux programmes de fonctionner avec de grands volumes de données et de mémoire dynamique. Ils fournissent l'adresse d'un élément de données pour un accès facile et maintiennent les deux niveaux d'adresse tout au long du passage des données. En utilisant doubles pointeurs (**), Un programme de langue C peut rapidement traiter de grandes quantités de données sans avoir besoin de redimensionner le tableau à chaque fois.