在3["XoePhoenix"]
中,数组索引是字符数组的类型。我们可以在C中这样做吗?数组索引必须是整数吗?
3["XeoPhoenix"]
是什么意思?
答案 0 :(得分:5)
3["XeoPhoenix"]
相当于"XeoPhoenix"[3]
,并将评估为第4个字符,即'P'
。
一般来说,a[i]
和i[a]
是等效的。
a[i] = *(a + i) = *(i + a) = i[a]
答案 1 :(得分:5)
3["XoePhoenix"]
与"XoePhoenix"[3]
相同,因此会评估为'P'
。
C中的数组语法只是写*( x + y )
的另一种方式,其中x
和y
是括号前后的子表达式。由于加法的可交换性,这些子表达式可以在不改变表达式含义的情况下进行交换。
因此3["XeoPhoenix"]
编译为*( 3 + "XeoPhoenix" )
,其中字符串衰减为指针,3
被添加到此指针,这反过来导致指向字符串中第4个字符的指针。 *
取消引用此指针,因此此表达式的计算结果为'P'
。
"XeoPhoenix"[ 3 ]
将被编译为*( "XeoPhoenix" + 3 )
,您可以看到这会导致相同的结果。
答案 2 :(得分:0)
在C中,数组是非常简单的数据结构,具有连续的内存块。因此,它们需要是整数,因为这些索引只不过是对内存中地址的偏移。