3["XoePhoenix"]是相同的"XoePhoenix"[3],所以它将评估为char 'P'.
C中的数组语法只是一种不同的写入方式*( x + y ),其中x和y是括号内部和内部的子表达式.由于加法的可交换性,可以在不改变表达式含义的情况下交换这些子表达式.
因此3["XeoPhoenix"]编译为*( 3 + "XeoPhoenix" )字符串衰减到指针并3添加到此指针的位置,这反过来导致指向字符串中第4个字符的指针.的*解引用该指针,因此该表达式评估为'P'.
"XeoPhoenix"[ 3 ]将被编译为*( "XeoPhoenix" + 3 ),你可以看到,这将导致相同的结果.
3["XeoPhoenix"]相当于"XeoPhoenix"[3]并将评估第4个字符即'P'.
在一般a[i]和i[a]是等价的.
a[i] = *(a + i) = *(i + a) = i[a]
Run Code Online (Sandbox Code Playgroud)