que signifie ** en C

Qu'est-ce que cela signifie Quand un objet a 2 astérisques au début?

**variable
29
demandé sur Tadeusz A. Kadłubowski 2010-05-23 23:34:19

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
    }
}
29
répondu Incognito 2010-05-23 19:41:34

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
43
répondu Adam Rosenfield 2010-05-23 19:36:56

Cela signifie que la variable est un pointeur vers un pointeur.

5
répondu SLaks 2010-05-23 19:35:52

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.

5
répondu Mavrik 2010-05-23 19:35:56

Pointeur sur un pointeur.

4
répondu mfabish 2010-05-23 19:35:55

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.

4
répondu Vimal 2010-05-23 20:46:09

* * 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'

2
répondu Pavel Radzivilovsky 2010-05-23 19:38:35

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

2
répondu Achim 2010-05-23 19:38:37

C'est un pointeur vers un pointeur. Vous pouvez l'utiliser si vous voulez pointer vers un array, ou const char * (chaîne de caractères). En outre, dans Objective-C avec Cocoa, ceci est souvent utilisé pour pointer vers un NSError*.

1
répondu 2010-05-23 19:37:43

Pointeur vers un autre pointeur

1
répondu HZhang 2010-05-23 20:47:25

** est un pointeur vers un pointeur. Ceux-ci sont parfois utilisés pour les tableaux de chaînes.

1
répondu Jake Petroules 2010-05-23 22:00:07

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

0
répondu Kraken 2010-05-24 17:32:00