web-dev-qa-db-fra.com

que signifie ** en C

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

**variable
29
numerical25

C'est pointeur à pointeur. Pour plus de détails, vous pouvez vérifier: Pointeur vers pointeur

[~ # ~] modifier [~ # ~] 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
Incognito

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

Lors de son utilisation, il le reporte 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
46
Adam Rosenfield

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

6
SLaks

Pointeur vers un pointeur lors de la déclaration de la variable.

Référence double pointeur lorsqu'elle est utilisée en dehors de la déclaration.

6
Mavrik

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
Vimal

Pointeur vers un pointeur.

4
mfabish

** la variable est un double déréférencement. Si variable est une adresse d'une adresse, l'expression résultante sera la valeur l à l'adresse stockée dans la variable *.

Cela peut signifier différentes choses si cela fait partie de la déclaration:

la variable type ** signifierait, d'autre part, un pointeur vers un pointeur, c'est-à-dire une variable qui peut contenir l'adresse d'une autre variable, qui est aussi un pointeur, mais cette fois vers une variable de type 'type'

2

Cela signifie que la variable est déréférencée deux fois. Supposons que vous ayez un pointeur vers un pointeur sur char comme ceci:

char ** variable = ...;

Si vous souhaitez accéder à la valeur vers laquelle pointe ce pointeur, vous devez le déréférencer deux fois:

**variable

2
Achim

Pointeur vers un autre pointeur

1
HZhang

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

1
Jake Petroules

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

1
user142019

c'est un pointeur à pointeur ,. comme si * x signifie qu'il contiendra une adresse d'une variable que si je dis m = & x que m est affiché comme int ** m

0
Kraken