web-dev-qa-db-fra.com

incrémenter la valeur de int pointé par le pointeur

J'ai un pointeur int (c'est-à-dire int *count) que je souhaite incrémenter l'entier pointé en utilisant le ++ opérateur. J'ai pensé appeler:

*count++;

Cependant, je reçois un avertissement de build "résultat d'expression inutilisé". Je peux appeler

*count += 1;

Mais je voudrais savoir comment utiliser le ++ opérateur également. Des idées?

65
joels

Le ++ a la même priorité que le * et l'associativité est de droite à gauche . Voir ici. Il est rendu encore plus complexe car même si le ++ sera associé au pointeur l'incrément est appliqué après l'évaluation de la déclaration.

L'ordre dans lequel les choses se produisent est le suivant:

  1. Après l'incrémentation, rappelez-vous que la valeur de l'adresse du pointeur post-incrémentée est temporaire
  2. Déréférencer une adresse de pointeur non incrémentée
  3. Appliquez l'adresse de pointeur incrémentée à compter, compter pointe maintenant vers la prochaine adresse mémoire possible pour une entité de son type.

Vous obtenez l'avertissement parce que vous n'utilisez jamais la valeur déréférencée à l'étape 2. Comme le dit @Sidarth, vous aurez besoin de parenthèses pour forcer l'ordre d'évaluation:

 (*ptr)++
86
Doug T.

Essayez d'utiliser (*count)++. *count++ peut incrémenter le pointeur à la position suivante, puis utiliser l'indirection (ce qui n'est pas intentionnel).

14
Sidharth Panwar