Якщо міняти & на &&, то треба мати на увазі, що в одному з її параметрів відбувається побічна дія (інкремент). Поки операція побітова, порядок її параметрів не має значення, а логічна робить обчислення коротким шляхом (тобто, виявивши, що один із параметрів має значення нуль, другий не обчислює). Якщо спершу обчислюється лівий параметр, і інкремент лишається тільки в лівому, це не критично, але якщо їх переставити, виникнуть проблеми з перевіркою парності, яка визначається цим інкрементом.
Потім, а що взагалі повертає операція a && b, якщо a ненульове, b — не нуль і не один? Наскільки я розумію, результатом буде b (а не 1) — яке в даному прикладі потім буде додано до суми, тому вийде якась нісенітниця.
Найпростіше пофіксити приклад, замінивши isdigit(*src) на !!isdigit(*src) (подвійне заперечення) або на isdigit(*src)!=0 (порівняння з нулем) — тоді результатом буде гарантовано або 0, або 1, що початково очікувалось автором теми.