je viens d'écrire la ligne de code suivante:utilisation appropriée de l'opérateur pré-incrément en combinaison avec l'opérateur de déréférence de pointeur
if (++(data_ptr->count) > threshold) { /*...*/ } // example 1
Mon intention est d'augmenter la variable count
dans la structure de données qui data_ptr
des points à avant de faire la comparaison à threshold
, et cette ligne de code fonctionne.
Si j'avais lieu voulu augmenter data_ptr
avant de faire la comparaison, je l'aurais écrit ceci:
if ((++data_ptr)->count > threshold) { /*...*/ } // example 2
Par curiosité, j'ai aussi essayé cette ligne de code:
if (++data_ptr->count > threshold) { /*...*/ } // example 3
Et trouvé qu'il se comporte exactement comme le premier.
Première question:Pourquoi fait exemple # 3 travail le même que l'exemple # 1? Est-ce une question de précarité de l'opérateur? Quelque chose dans la norme? J'ai dû écrire un programme de test rapide parce que la réponse n'était pas évidente pour moi.
Deuxième question: Dois-je écrire différemment cette instruction if
? Je pourrais effectuer l'incrément d'abord, sur sa propre ligne, et puis tester la condition afin d'éviter toute confusion possible. Est-ce nécessaire, ou les deux premiers exemples sont-ils assez évidents?
+1 succincts. '' –