In 3[\"XoePhoenix\"]
, array index is of type array of characters. Can we do this in C? Isn\'t it true that an array index must be an integer?
What does
3["XeoPhoenix"]
is equivalent to "XeoPhoenix"[3]
and would evaluate to the 4th character i.e 'P'
.
In general a[i]
and i[a]
are equivalent.
a[i] = *(a + i) = *(i + a) = i[a]
3["XoePhoenix"]
is the same as "XoePhoenix"[3]
, so it will evaluate to the char 'P'
.
The array syntax in C is not more than a different way of writing *( x + y )
, where x
and y
are the sub expressions before and inside the brackets. Due to the commutativity of the addition these sub expressions can be exchanged without changing the meaning of the expression.
So 3["XeoPhoenix"]
is compiled as *( 3 + "XeoPhoenix" )
where the string decays to a pointer and 3
is added to this pointer which in turn results in a pointer to the 4th char in the string. The *
dereferences this pointer and so this expression evaluates to 'P'
.
"XeoPhoenix"[ 3 ]
would be compiled as *( "XeoPhoenix" + 3 )
and you can see that would lead to the same result.
In C, arrays are very simple data structures with consecutive blocks of memory. They therefore need to be integers as these indices are nothing more than offsets to addresses in memory.