在
3["XoePhoenix"]
中,数组索引是字符数组类型。在C语言中可以这样做吗?难道数组索引不必须是整数吗?
3["XeoPhoenix"]
是什么意思?3["XoePhoenix"]
与"XoePhoenix"[3]
相同,因此它将评估为字符'P'
。
C语言中的数组语法不过是以不同的方式编写*(x+y)
,其中x
和y
是括号前面和内部的子表达式。由于加法的可交换性,这些子表达式可以交换而不改变表达式的含义。
因此,3["XeoPhoenix"]
被编译为*(3+"XeoPhoenix")
,其中字符串会退化为指针,并且3
被添加到该指针中,从而得到一个指向字符串中第四个字符的指针。 *
对该指针进行解引用,因此该表达式评估为'P'
。
"XeoPhoenix"[3]
将被编译为*("XeoPhoenix"+3)
,您可以看到这将导致相同的结果。
3["XeoPhoenix"]
相当于 "XeoPhoenix"[3]
,它的结果是第四个字符,即 'P'
。
通常情况下,a[i]
和 i[a]
是等价的。
a[i] = *(a + i) = *(i + a) = i[a]