[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