Dupliquer possible:
++ sur un pointeur déréférencé en C?
De même, que seraient * ptr + = 1 * ptr% 8 et * ptr / 8?
Les différences semblent déroutantes. Est-ce que cela dépend peut-être du compilateur?
Cela a à voir avec la priorité des opérateurs. L’opérateur *
a une priorité inférieure à celle de ++
, il est donc passé en dernier.
Voici un tableau Wikipedia répertoriant tous les opérateurs: http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence
Vous pouvez voir dans le graphique que postfix ++
a une priorité de 2 alors que *
dereference a une priorité de 3. (Les nombres sont légèrement en arrière, car les nombres les plus bas ont une priorité plus élevée).
Priorité des opérateurs. L’opérateur ++
“lie plus étroitement” que l’opérateur *
.
Voici le tableau, par ordre de priorité. http://isthe.com/chongo/tech/comp/c/c-precedence.html
Ce n’est pas dépendant du compilateur. Il se comportera toujours de cette façon.
En raison de la priorité (c’est comme ça que C fonctionne).
C FAQ sur le sujet * exact *
Les opérateurs postfix ++ et – ont essentiellement une priorité plus élevée que les opérateurs unaires de préfixe. Par conséquent, * p ++ est équivalent à * (p ++);
en raison de la priorité de l’ opérateur
le postfix ++ a une priorité plus élevée que l’opérateur *. Ce n’est pas dépendant du compilateur.
* ptr + = 1 augmentera la valeur indiquée par ptr de un (ou appelera l’opérateur surchargé approprié) * ptr% 8 calculera le rest de la valeur indiquée par ptr divisé par 8 * ptr / 8 calculera la division de la valeur indiquée par ptr et 8
Ce lien contient un tableau des règles de priorité des opérateurs pour C.
De wikipedia :
Pour la norme ISO C 1999, la note 6.5.6, note 71, indique que la grammaire C fournie par la spécification définit la priorité des opérateurs C
Cela signifie que la priorité de l’opérateur est régie par la norme C.
Les différences semblent déroutantes. Est-ce que cela dépend peut-être du compilateur?
Non, la priorité des opérateurs est définie dans la spécification c lang. Et ainsi, * prt ++ fait toujours déférencer le pointeur avant que la post-incrémentation ne se produise.