[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