ho appena scritto la seguente riga di codice:corretto utilizzo del operatore di pre-incremento, in combinazione con l'operatore puntatore dereference
if (++(data_ptr->count) > threshold) { /*...*/ } // example 1
Il mio intento è quello di incrementare la variabile count
all'interno della struttura dati che data_ptr
punta a prima di effettuare il confronto su threshold
, e questa linea di codice funziona.
Se avessi invece voluto incrementare data_ptr
prima di effettuare il confronto, avrei scritto questo:
if ((++data_ptr)->count > threshold) { /*...*/ } // example 2
Per curiosità, ho provato anche questa riga di codice:
if (++data_ptr->count > threshold) { /*...*/ } // example 3
E trovato che si comporta esattamente come il primo.
Prima domanda:Perché fa esempio # 3 funzionano come ad esempio # 1? È una questione di precarietà dell'operatore? Qualcosa nello standard? Ho dovuto scrivere un programma di test rapido perché la risposta non era ovvia per me.
Seconda domanda: Devo scrivere questa dichiarazione if
in modo diverso? Potrei eseguire prima l'incremento, sulla sua linea, e quindi verificare la condizione per evitare ogni possibile confusione. È necessario, o i primi due esempi sono abbastanza evidenti da soli?
+1 succinta. '' –