[SOS] Re: Sos Digest, Vol 4, Issue 5
David Decotigny
david.decotigny at free.fr
Wed Jun 23 18:03:18 CEST 2004
Bonjour,
Brice Arnould wrote:
> Mais en fait, je suppose que ça marche parce que "char *res=dest" correspond à
> "char* res=dest" (même si c'était pas clair pour un débutant comme moi).
Oui, le C est assez bizarre de ce point de vue.
Si je veux dire que toto est un caractere situé a l'adresse 456, il faut
que j'ecrive :
char *toto = 456; /* Je fais volontairement abstraction des casts */
Autrement dit, c'est bien toto en tant que "char *" qui vaut 456. Ce
n'est pas "*toto" en tant que "char" qui vaut 456 (ce qui n'aurait pas
de sens d'ailleurs en arithmetique 8bits).
Bref on serait naturellement tenté d'ecrire :
char* toto = 456;
Seulement quand on ecrit ça, c'est soit qu'on sait ce qu'on fait, soit
qu'on est en train de faire une betise...
Car imaginons que maintenant je veuille ecrire que toto est un caractere
situe a l'adresse 456, et que titi est un caractere situe a l'adresse
78, tout ca en une seule ligne. Alors il faut que j'ecrive :
char *toto=456, *titi=78;
Et NON PAS :
char* toto=456, titi=78;
qui signifierait que toto est un caractere situe a l'adresse 456, et que
titi est un caractere *qui vaut* 78 (et situé la où le compilateur le veut).
Cette convention de declaration de C justifie d'ailleurs en partie
l'interet d'avoir un "typedef" qui est davantage qu'un simple #define...
En effet, si la 2eme notation etait valable, on aurait pu se passer de
typedef. Au lieu d'ecrire :
typedef char* charptr;
charptr toto, titi; /* toto et titi sont des pointeurs sur char */
J'aurais pu me passer de l'ecriture typedef et me contenter de #define :
#define charptr char*
charptr toto, titi;
Seulement, en C classique, avec ça on se retrouve avec le meme probleme
que tout a l'heure, a savoir que toto est bien un char*, mais que titi
est un char tout court.
C'est un des details que je n'aime pas avec le C. Il me semble avoir
trouve une explication du pourquoi de la chose un jour, mais je l'ai
oubliee.
Bonne soiree,
--
David Decotigny -- http://david.decotigny.free.fr
More information about the Sos
mailing list