Hola
boctulus, bueno me preguntas porque declare el parámetro como:
char possibleNumber[]
y no por un puntero a char, bueno la respuesta es que son lo mismo.
Cuando tu le indicas que le vas a pasar un arreglo como paremetro realmente le estas indicando que le estas pasando un puntero no importa el tipo de dato, la cosas cambia cuando es mas un de una dimension ejemplo
arreglo[][10]
aqui ya tiene un sentido un poco mas profundo.
En fin si tu declaras tu funcion asi
int isInteger(char *possibleNumber)
no afecta en nada, ahora con respecto a porque trato a possibleNumber como un puntero es que realmente es un puntero.
Cuando hago:
while(*possibleNumber)
estoy hanciendo varias operaciones una con el asterisco le estoy diciendo que me de el contenido de la direccion a donde esta apuntado la variable y al estar dentro de un while al mismo tiempo estoy haciendo una comparación booleana ya que en C o C++ el 1 significa true y el 0 False, asi que cuando accedo al contenido todo lo que sea diferente a 0 sera como decir
while(true)
.
Ahora hay que recordar que todas la cadenas en C o C++ "deberian" estar terminadas en nulo osea en CERO por ende el while vas a estar interando hasta que encuentre el final de la cadena osea hasta que encuentre el CERO
Pero es importante hacer esto
possibleNumber++
ya sino lo hacemos estariamos metidos en un bucle infinito ya que possibleNumber++; lo que hace es apuntar a un siguiente caracter.
Bueno el tema es interesante si quieres saber mas detalladamente esto seria bueno hecharle una mirada a la artimetica de punteros y como manipular cadenas en C
Salutos...