que signifie ** en C
Qu'est-ce que cela signifie Quand un objet a 2 astérisques au début?
**variable
12 réponses
C'est pointeur sur pointeur. Pour plus de détails, vous pouvez vérifier : Pointeur de pointeur
EDIT cela peut être bon par exemple pour allouer dynamiquement des tableaux multidimensionnels:
Comme :
#include <stdlib.h>
int **array;
array = malloc(nrows * sizeof(int *));
if(array == NULL)
{
fprintf(stderr, "out of memory\n");
exit or return
}
for(i = 0; i < nrows; i++)
{
array[i] = malloc(ncolumns * sizeof(int));
if(array[i] == NULL)
{
fprintf(stderr, "out of memory\n");
exit or return
}
}
Dans une déclaration, cela signifie que c'est un pointeur vers un pointeur:
int **x; // declare x as a pointer to a pointer to an int
Lorsque vous l'utilisez, il le défère deux fois:
int x = 1;
int *y = &x; // declare y as a pointer to x
int **z = &y; // declare z as a pointer to y
**z = 2; // sets the thing pointed to (the thing pointed to by z) to 2
// i.e., sets x to 2
Pointeur vers un Pointeur lors de la déclaration de la variable.
Dé-référence du double pointeur lorsqu'il est utilisé en dehors de la déclaration.
Vous pouvez utiliser cdecl pour expliquer les types C.
Il y a une interface en ligne ici: http://cdecl.org / . Entrez "int * * x" dans le champ de texte et vérifiez le résultat.
* * variable est double déréférence. Si la variable est une adresse d'une adresse, l'expression résultante sera la lvalue à l'adresse stockée dans *variable.
Cela peut signifier différentes choses si cela fait partie de la déclaration:
**de Type variable signifierait, d'autre part, un pointeur vers un pointeur, c'est une variable qui peut contenir l'adresse d'une autre variable, qui est aussi un pointeur, mais cette fois à une variable de type 'type'
Cela signifie que la variable est déréférencée deux fois. Supposons que vous ayez un pointeur vers un pointeur vers char comme ceci:
Char** variable = ...;
Si vous voulez accéder à la valeur de ce pointeur, vous devez la déréférencer deux fois:
**variable
** est un pointeur vers un pointeur. Ceux-ci sont parfois utilisés pour les tableaux de chaînes.
C'est un pointeur sur pointeur,. comme si *x signifie qu'il va contenir l'adresse d'une variable que si je dis m = & x Que m est montré comme int * * m