il primo while trova la prima occorrenza di uno spazio nella stringa, il successivo va avanti finchè trova degli spazi (potrebbero essercene più di uno come separatore tra parole) e quindi si posiziona esattamente in corrispondenza del primo carattere della parola successiva.

++app e (app+1) sono equivalenti in questo caso, puoi usare il secondo se ti è più chiaro.

if (!*app) ..
in app c'è la copia della prima parola, se ho raggiunto la sua terminazione (il carattere \0 ), vuol dire che ho finito di esaminarla e se sono arrivato fino a qui che tutte le corrispondenze sono state controllate (altrimenti sarebbe uscito prima con false).
ciao
sergio