Quelle est la différence entre int const * p et const int * p?


Réponse 1:

Bonjour,

la question implique deux choses Constant et Pointer. Maintenant, nous savons tous que si une variable qui est déclarée constante, nous ne pouvons pas changer sa valeur et Un pointeur est une variable qui stocke l'adresse d'une autre variable.

Et il y a aussi deux opérateurs que nous rencontrons dans les pointeurs & et *. & est pour attribuer l'adresse de la variable au pointeur et * est utilisé pour faire référence à la valeur de cet emplacement vers lequel le pointeur pointe.

Passons maintenant à la question,

const int * p est un pointeur sur une variable constante et comme nous savons tous que nous ne pouvons pas changer la valeur d'une constante, l'opération suivante n'est pas valide et donne une erreur.

* p = 3; // invalide ici nous essayons de modifier une variable constante.

Mais p = & i; // est VALIDE je peux être n'importe quelle variable

il existe un autre moyen de spécifier le pointeur vers une constante, c'est-à-dire

int const * p1; // pointeur sur la constante int

il y a un autre type de déclaration que nous voyons, c'est-à-dire int * const p, ce qui est connu comme un pointeur constant signifie que l'adresse vers laquelle il pointe ne peut pas être modifiée, donc des opérations comme

* p = 3; // considéré comme valide lorsque la valeur de la variable est modifiée.

MAIS p = & i; // est considéré comme non valide car il tente de modifier la valeur de la constante.

Il est également possible de déclarer un pointeur constant sur une constante. Dans ce cas, ni la valeur du pointeur ni la valeur de l'élément de données de base ne peuvent être modifiées. la syntaxe est

const int * const p;

Voici une façon de se souvenir de la syntaxe, c'est-à-dire que dans CONSTANT POINTER, «const» vient toujours après *.

si vous voulez en savoir plus sur cette visite geeksforgeeks et rechercher le qualificatif const en C, il a un programme qui vous expliquera plus.

espérons que cela dissipera certains doutes.


Réponse 2:

int const * p => p est un pointeur constant vers une variable entière et dans lequel l'adresse pointée par p sera constante (ne peut pas être modifiée) et la valeur dans cette adresse peut être modifiée

const int * p => p est un pointeur vers une variable entière constante et dans lequel la valeur de l'adresse pointée par p sera constante et l'adresse pointée par p peut être modifiée


Réponse 3:
Const et pointeurs:

Il est important de faire la différence entre un pointeur sur une constante et un
pointeur constant vers une variable.

Voici un pointeur sur une constante:

  const int * p;

La déclaration suivante est illégale, car elle tente de modifier le
valeur d'une constante:

  * p = 3;

Mais celui-ci est légal, car le pointeur lui-même n'est pas une constante:

  p = & x;

D'un autre côté, cette déclaration montre un pointeur constant vers une variable.

  int * const p;

Dans ce cas, la déclaration suivante est légale, car la variable peut être modifiée:

  * p = 3;

mais celui-ci ne l'est pas, car il tente de changer la valeur d'une constante.

  p = & x;

Il est possible de déclarer un pointeur constant sur une constante. Dans ce
cas ni la valeur du pointeur ni la valeur des données de base
l'élément peut être modifié:

  const int * const p;


Voici une façon de se souvenir de la syntaxe (de Bjarne Stroustrup):

Notez que dans les pointeurs const, "const" vient toujours après le "*". Pour
exemple:

  int * const p1 = q; // pointeur constant vers la variable int
  int const * p2 = q; // pointeur vers la constante int
  const int * p3 = q; // pointeur vers la constante int

Une autre façon est de penser à «*» comme capturant le plus grand à gauche
unité qu'il peut. 'Const' capture la plus petite unité, gauche ou droite,
c'est peut. Considérez donc les exemples ci-dessus comme:

  (int *) const p1 = q; // pointeur constant vers la variable int
  (int const) * p2 = q; // pointeur vers la constante int
  (const int) * p3 = q; // pointeur vers la constante int

En d'autres termes, le qualificatif précédant immédiatement la variable est
le premier mot de la définition.


Réponse 4:
Const et pointeurs:

Il est important de faire la différence entre un pointeur sur une constante et un
pointeur constant vers une variable.

Voici un pointeur sur une constante:

  const int * p;

La déclaration suivante est illégale, car elle tente de modifier le
valeur d'une constante:

  * p = 3;

Mais celui-ci est légal, car le pointeur lui-même n'est pas une constante:

  p = & x;

D'un autre côté, cette déclaration montre un pointeur constant vers une variable.

  int * const p;

Dans ce cas, la déclaration suivante est légale, car la variable peut être modifiée:

  * p = 3;

mais celui-ci ne l'est pas, car il tente de changer la valeur d'une constante.

  p = & x;

Il est possible de déclarer un pointeur constant sur une constante. Dans ce
cas ni la valeur du pointeur ni la valeur des données de base
l'élément peut être modifié:

  const int * const p;


Voici une façon de se souvenir de la syntaxe (de Bjarne Stroustrup):

Notez que dans les pointeurs const, "const" vient toujours après le "*". Pour
exemple:

  int * const p1 = q; // pointeur constant vers la variable int
  int const * p2 = q; // pointeur vers la constante int
  const int * p3 = q; // pointeur vers la constante int

Une autre façon est de penser à «*» comme capturant le plus grand à gauche
unité qu'il peut. 'Const' capture la plus petite unité, gauche ou droite,
c'est peut. Considérez donc les exemples ci-dessus comme:

  (int *) const p1 = q; // pointeur constant vers la variable int
  (int const) * p2 = q; // pointeur vers la constante int
  (const int) * p3 = q; // pointeur vers la constante int

En d'autres termes, le qualificatif précédant immédiatement la variable est
le premier mot de la définition.


Réponse 5:
Const et pointeurs:

Il est important de faire la différence entre un pointeur sur une constante et un
pointeur constant vers une variable.

Voici un pointeur sur une constante:

  const int * p;

La déclaration suivante est illégale, car elle tente de modifier le
valeur d'une constante:

  * p = 3;

Mais celui-ci est légal, car le pointeur lui-même n'est pas une constante:

  p = & x;

D'un autre côté, cette déclaration montre un pointeur constant vers une variable.

  int * const p;

Dans ce cas, la déclaration suivante est légale, car la variable peut être modifiée:

  * p = 3;

mais celui-ci ne l'est pas, car il tente de changer la valeur d'une constante.

  p = & x;

Il est possible de déclarer un pointeur constant sur une constante. Dans ce
cas ni la valeur du pointeur ni la valeur des données de base
l'élément peut être modifié:

  const int * const p;


Voici une façon de se souvenir de la syntaxe (de Bjarne Stroustrup):

Notez que dans les pointeurs const, "const" vient toujours après le "*". Pour
exemple:

  int * const p1 = q; // pointeur constant vers la variable int
  int const * p2 = q; // pointeur vers la constante int
  const int * p3 = q; // pointeur vers la constante int

Une autre façon est de penser à «*» comme capturant le plus grand à gauche
unité qu'il peut. 'Const' capture la plus petite unité, gauche ou droite,
c'est peut. Considérez donc les exemples ci-dessus comme:

  (int *) const p1 = q; // pointeur constant vers la variable int
  (int const) * p2 = q; // pointeur vers la constante int
  (const int) * p3 = q; // pointeur vers la constante int

En d'autres termes, le qualificatif précédant immédiatement la variable est
le premier mot de la définition.