Chaîne en tant qu’index de tableau

Dans 3["XoePhoenix"] , l’index de tableau est de type tableau de caractères. Peut-on faire cela en C? N’est-il pas vrai qu’un index de tableau doit être un entier?

Que signifie 3["XeoPhoenix"] ?

3["XoePhoenix"] est identique à "XoePhoenix"[3] , donc il sera évalué au caractère 'P' .

La syntaxe du tableau en C n’est pas plus qu’une manière différente d’écrire *( x + y ) , où x et y sont les sous-expressions situées avant et entre crochets. En raison de la commutativité de l’addition, ces sous-expressions peuvent être échangées sans changer le sens de l’expression.

Donc 3["XeoPhoenix"] est compilé comme *( 3 + "XeoPhoenix" ) où la chaîne se désintègre en un pointeur et 3 est ajouté à ce pointeur, qui à son tour donne un pointeur sur le 4ème caractère de la chaîne. Le * déréférence ce pointeur et donc cette expression est évaluée à 'P' .

"XeoPhoenix"[ 3 ] serait compilé comme *( "XeoPhoenix" + 3 ) et vous pouvez voir que cela conduirait au même résultat.

3["XeoPhoenix"] est équivalent à "XeoPhoenix"[3] et serait évalué au 4ème caractère, c’est-à-dire 'P' .

En général, a[i] et i[a] sont équivalents.

 a[i] = *(a + i) = *(i + a) = i[a] 

En C, les tableaux sont des structures de données très simples avec des blocs de mémoire consécutifs. Ils doivent donc être des entiers car ces index ne sont rien de plus que des décalages aux adresses en mémoire.