3["XoePhoenix"]
- это то же самое, что и "XoePhoenix"[3]
, поэтому он будет вычисляться как char 'P'
.
Синтаксис массива в C не более чем другой способ записи *( x + y )
, гдеx
и y
являются подвыражениями перед и внутри скобок.Из-за коммутативности сложения эти подвыражения могут быть изменены без изменения смысла выражения.
Так 3["XeoPhoenix"]
компилируется как *( 3 + "XeoPhoenix" )
, где строка распадается на указатель и добавляется 3
на этот указатель, который, в свою очередь, приводит к указателю на 4-й символ в строке.*
разыменовывает этот указатель, поэтому это выражение оценивается как 'P'
.
"XeoPhoenix"[ 3 ]
будет скомпилировано как *( "XeoPhoenix" + 3 )
, и вы можете видеть, что это приведет к тому же результату.