el while debería ser ==, no =. un sólo = es una asignación, no una comparación, el resultado de while(variable1 = variable2) siempre es true, es un error de novatos (como yo).
si es una pregunta para pillar la respuesta es que eso siempre es true, por lo menos mientras *a o *b no suba tanto como para desbordar alguna pila o acceder a direcciones de memoria que no existan (ya que en cada iteración al poner el ++ aumentan de posición).
si no es a pillar, creo que lo que esta haciendo es buscar el punto en el que a y b, que en este caso son punteros a un char son distintos, o sea, que no apuntan al mismo sitio. supongo que será una forma de comprobar cuando dos strings dejan de apuntar a la misma dirección de memoria, ya que si tienes un string declarado "frase" y tienes un puntero a la primera letra (f), entonces "puntero_a_f + 1" apunta a r, "puntero_a_f + 2" apunta a a y así sucesivamente. a la gente que le gusta c (que no es mi caso) creo que le gusta poder trabajar así con strings. a mi me parece una ida de olla...
salu2