stpy98 ha scritto:
... ma perchè basta scrivere while( *s ) ?
Penso che abbiano ragione gli altri nel dire che dovresti prima prendere confidenza con l'uso dei puntatori. Comunque, s è il puntatore alla stringa di testo che è un vettore di caratteri. Una stringa di testo correttamente formattata deve sempre terminare con il carattere null che si scrive: '\0' e che vale 0 (zero). Dunque, se la stringa la scrivi tu, al suo termine dovrai aggiungere il carattere '\0', mentre se la stringa ti arriva da un generatore sicuro, terminerà sempre con il carattere '\0'. Ad esempio se tu scrivi:
char *dato = "123";
bool result = HasOnlyDigits(dato);
sarai sicuro che il puntatore s riceverà un vettore di 4 caratteri, ovvero '1', '2', '3' e '\0' perché il compilatore costruirà la stringa di testo aggiungendo correttamente il terminatore nullo.
Ora, perché basta scrivere: while( *s ) ? semplicemente perché while( statement ) valuta se statement è vero o falso.
Come tu hai giustamente scritto prima, s = &dato[0] e ciò significa che *s == dato[0], *++s == dato[1], *++s == dato[2] e via dicendo.
Ovvero, il puntatore s dereferenziato accede al carattere puntato. ora, quando *s rappresenterà l'ultimo carattere della stringa, ovvero il terminatore null, l'istruzione while lo valuterà come condizione falsa e terminerà il ciclo.