Sally (./114) :
déclarer que « la case mémoire vers où pointe a contient un entier » est un peu bizarre dans la mesure où a ne pointe pas toujours vers la même case mémoire (et au moment de la déclaration ne pointe vers rien du tout).
Mais dans la mesure où le type de ce vers quoi pointe a reste *toujours* le même, tu peux l'interpréter dans le sens "*a sera toujours à interpréter comme un int" et c'est déjà bcp plus raisonnable. Même "int a[10]" qui est un peu bizarre se comprend dans la mesure où a[10] (qui n'est pas complètement valide puisqu'on ne peut pas le déréférencer) est bien de type int et on peut en prendre l'adresse (qui sera alors de type int*, comme toutes les adresses d'int).
Bref si tu prends ça comme une déclaration purement de typage plutôt que comme une déclaration sémantique "je pourrai toujours accéder à *a" (ce qui est faux si a est nul par exemple), ça reste raisonnable.
Cela dit je suis d'accord, c'est ridicule de faire ça avec un opérateur préfixe, ils auraient pu faire :
int strlen(char s!) {
int n = 0;
while (s++!)
n++;
return n;
}
et ça aurait pas été moins intuitif que les tableaux ^^ (et puis ça éviterait les parenthèses pour des trucs comme int pointeur_vers_tableau![40])