String as an array index
In 3[开发者_如何学JAVA"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"]
mean?
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.
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]
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.
精彩评论