Archives quotidiennes :

Des tableaux et des indexes (ou l’inverse …)

J’ai appris un fun fact avec le C en parcourant Stack Overflow aujourd’hui 🙂

En général pour parcourir un tableau, par exemple un tableau de caractères:

char *toto

un index commençant Ă  0 en C, on fait gĂ©nĂ©ralement toto[0] pour accĂ©der au premier Ă©lĂ©ment, toto[1] pour accĂ©der au second, etc…

Et que se passe-t-il lorsqu’on essaye d’Ă©crire par exemple 5[toto] ?

Et bien ça fait exactement la mĂŞme chose que lorsqu’on Ă©crit toto[5] (on accède Ă  la sixième case du tableau), pour une raison simple : pour le compilateur, l’opĂ©ration « a[b] » pourrait se traduire par  » dĂ©rĂ©fĂ©rence l’adresse a (un tableau n’est jamais qu’une suite d’octets rĂ©servĂ©e en mĂ©moire, l’adresse du tableau Ă©tant de fait l’adresse de la première case), puis avance de b cases ». Autrement dit :

*(a + b)

(en C on dĂ©rĂ©fĂ©rence avec l’opĂ©rateur *)

Et, attention mathĂ©matiques niveau CP 🙂 L’addition Ă©tant commutative, l’expression « a+b » Ă©gale « b+a ».

Ainsi, d’une manière un peu surprenante mais pourtant totalement logique, la syntaxe 5[toto] fonctionne parfaitement !

Le C ne cessera jamais de m’Ă©tonner … 🙂