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:
[cci lang= »c »]char *toto[/cci]
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 :
[cci lang= »c »]*(a + b)[/cci]
(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 … 🙂