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)