字符串作为数组索引

Mic*_*ael 4 c arrays

3["XoePhoenix"],数组索引是字符数组的类型.我们可以在C中这样做吗?数组索引必须是整数是不是真的?

什么3["XeoPhoenix"]意思?

x4u*_*x4u 6

3["XoePhoenix"]是相同的"XoePhoenix"[3],所以它将评估为char 'P'.

C中的数组语法只是一种不同的写入方式*( x + y ),其中xy是括号内部和内部的子表达式.由于加法的可交换性,可以在不改变表达式含义的情况下交换这些子表达式.

因此3["XeoPhoenix"]编译为*( 3 + "XeoPhoenix" )字符串衰减到指针并3添加到此指针的位置,这反过来导致指向字符串中第4个字符的指针.的*解引用该指针,因此该表达式评估为'P'.

"XeoPhoenix"[ 3 ]将被编译为*( "XeoPhoenix" + 3 ),你可以看到,这将导致相同的结果.


Pra*_*rav 5

3["XeoPhoenix"]相当于"XeoPhoenix"[3]并将评估第4个字符即'P'.

在一般a[i]i[a]是等价的.

a[i] = *(a + i) = *(i + a) = i[a] 
Run Code Online (Sandbox Code Playgroud)

  • 奇怪的功能,它使它成为列表的顶部:http://stackoverflow.com/questions/1995113/strangest-language-feature/1995156#1995156 (2认同)