Qualcuno sa il perchè ? Sono entrambe puntatori ...

edit:

L' ho appena capito: se dichiaro:
codice:
char s1[]="ciao";
char *s2=s1;
La locazione di memoria di s1 è statica e non può cambiare, non posso allocarci memoria o cambiare la sua locazione:
codice:
s1=(char*)malloc(10*sizeof(char)); // errore
Mentre s2 è un puntatore non un array, e come tale è dinamico.
Per cui la dimensione di s1 è decisa a compile-time, ecco perchè sizeof ritorna la sua dimensione esatta.
Invece la dimensione di s2 è variabile, la sua locazione di memoria può cambiare, per cui sizeof ritorna semplicemente la dimensione del puntatore, non potrebbe ritornare la lunghezza della stringa.