Quelle est la différence entre "*" et "**" en C et C ++?


Réponse 1:

Le * peut être une multiplication, indiquer un type de pointeur dans une déclaration ou déréférencer un pointeur. Le ** peut indiquer un pointeur sur un pointeur ou déréférencer un pointeur sur un pointeur.

int x = 5;
int * p = & x; // p est un pointeur sur x;
int ** pp = & p; // pp est un pointeur vers p, c'est-à-dire qu'il est un pointeur vers un pointeur vers un int, dans ce cas x, puisque p est un pointeur vers un int alors son adresse se trouve avec & p
int y = * p; // y est 5
y = 2 + ** pp; // y est 7 car ** pp est 5
int * arr = new int [x]; // arr est un pointeur sur int, utilisé comme un tableau
const int lignes = 3, colonnes = 8;
int ** arr2d = new int * [lignes]; // tableau à 2 dimensions
for (int r = 0; r 

Réponse 2:

Autre que la multiplication, * est utilisé pour déclarer un pointeur. Et * est également appelé déréférencement.

Le déréférencement signifie que si une variable stocke une adresse, le déréférencement nous permet d'accéder à la valeur présente à cette adresse. Mais si nous utilisons le déréférencement sur une variable simple, alors quelle valeur contient une variable peut la considérer comme une adresse et accéder à la valeur à cette adresse.

Prenons un exemple

int * p;

Ici, nous déclarons p comme variable pointeur de type entier.

Maintenant, prenons simplement une variable

int x = 10;

Maintenant, nous attribuons l'adresse de x à p (disons que l'adresse de x est 1000

p = & x;

p est une variable pointeur et nous y stockons l'adresse de x. & (esperluette) est utilisé pour obtenir l'adresse d'une variable. Maintenant p contient 1000

Maintenant, si nous ajoutons et imprimons le p, cela nous donne 1000

printf ("% d", p);

Sortie: 1000

Mais si nous voulons imprimer la valeur de ce que contient une adresse, nous y ajoutons * (déréférencement).

printf ("% d", * p);

Sortie: 10

Alors maintenant

* contre **

Supposons qu'il y ait quatre peuples

  1. RajaJameJonYou

Et Raja a la vôtre CashPrize

int cashPrize = 999999;
int Raja = cashPrize;

Donc, si vous connaissez Raja, vous pouvez en obtenir directement

int You = * Raja;

Mais si vous ne connaissiez pas Raja mais que vous connaissez Jame qui est un ami de Raja, vous pouvez le contacter.

int * Jame = & Raja;
int You = * Jame;

Et si vous ne connaissiez pas Jame mais que vous connaissez Jon qui est un ami de Jame et Jame est un ami de Raja alors vous pouvez le contacter.

int * Jame = & Raja;
int ** Jon = & Jame;
int You = * Jon;

Ainsi, * est utilisé pour déclarer un pointeur. Et ** est utilisé pour déclarer un pointeur sur un pointeur.