[gull] Subtilité de C n° 6 : Tableaux et pointeurs, presque pareils

Leopoldo Ghielmetti leopoldo.ghielmetti at a3.epfl.ch
Sat Aug 2 12:23:19 CEST 2008


Il giorno sab, 02/08/2008 alle 11.16 +0200, Yves Martin ha scritto:
> On Tue, 2008-07-29 at 20:16 +0200, Marc Mongenet wrote:
> 
> > Conclusion : l'opérateur [] s'applique _toujours_ à un pointeur
> > et un entier. En plus, par définition, E1[E2] est équivalent à
> > *((E1)+(E2)).
> 
>  Salut Marc,
> 
> C'est sympa de réviser le C avec tes "subtilités"... ça me change du
> Java ;)
> 
> Par contre, je trouve que tu as appliqué un raccourci malheureux, certes
> valable pour un tableau de char ou de byte, mais tu aurais du écrire
> quelque chose comme:
>  E1[E2] == *((E1) + sizeof(typeof(E1)) * E2)

Ce n'est pas exact. La définition donnée par Marc est correcte:
E1[E2] = *((E1)+(E2))

si tu veux utiliser le sizeof pour montrer le décalage en byte en
mémoire tu devrais écrire à peu près:
E1[E2] == *(typeof(E1)*)()(((int)(E1))+sizeof(typeof(E1))*E2)

en supposant que (typeof(E1)*) soit un cast valide (chose que je doute
fort) et que E2 soit un entier, dans le cas contraire il faudrait
inverser E1 et E2 dans la formule.

> A+
> Yves

ciao, Leo




More information about the gull mailing list