@StandardOil, sei ziovine, per cui ti sfuggono certe sottigliezze.
MAI e poi mai mettersi a risparmiare linee di codice PENSANDO che cosi' l'algoritmo sia piu' efficiente.
MAI sfruttare 'trucchetti', come quello di sfruttare il fatto che in C falso==0, true==1 (che non e' sempre detto).
I motivi sono molti:
1) chi progetta i compilatori sa molto meglio di chiunque come sfruttare questi trucchetti. Ed e' in grado di applicare strategie di ottimizzazione MOOOOLTO piu' sofisticate, oltre al fatto di essere in grado di sfruttare meglio l'hardware sottostante
2) riduci la comprensibilita' del codice, e rischi di introdurre errori difficilmente identificabili
3) il miglioramento di performance di un algoritmo lo ottieni convertendo un algoritmo di complessita' n^2 in uno n*log(n), NON risparmiando qualche micro/nano secondo su un'unica linea di codice.
Quindi, per questo, 10 per l'idea, ma 3 per l'implementazione, perche' compito FONDAMENTALE del programmatore NON E' scrivere codice compatto, ma CODICE MANTENIBILE.
Quindi, ad esempio:
a) mai usare i puntatori per scandire un array, ma usare sempre 'array[indice]'
b) mai incrementare un contatore al di fuori del for o, come ha fatto @AldoBaldo, all'interno di un'espressione.
c) mai sfruttare conversioni 'implicite' (boolean -> intero). In questo caso, ad esempio, usare l'operatore '?:'
d) ecc
Il codice e' piu' chiaro, e non si perde nulla perche' sara' il compilatore a fare le opportune ottimizzazioni.