作为数组索引的字符串

4
3["XoePhoenix"]中,数组索引是字符数组类型。在C语言中可以这样做吗?难道数组索引不必须是整数吗? 3["XeoPhoenix"]是什么意思?

请参见以下内容:https://dev59.com/83RC5IYBdhLWcg3wMd9S - x4u
3个回答

6

3["XoePhoenix"]"XoePhoenix"[3]相同,因此它将评估为字符'P'

C语言中的数组语法不过是以不同的方式编写*(x+y),其中xy是括号前面和内部的子表达式。由于加法的可交换性,这些子表达式可以交换而不改变表达式的含义。

因此,3["XeoPhoenix"]被编译为*(3+"XeoPhoenix"),其中字符串会退化为指针,并且3被添加到该指针中,从而得到一个指向字符串中第四个字符的指针。 *对该指针进行解引用,因此该表达式评估为'P'

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


5

3["XeoPhoenix"] 相当于 "XeoPhoenix"[3],它的结果是第四个字符,即 'P'

通常情况下,a[i]i[a] 是等价的。

a[i] = *(a + i) = *(i + a) = i[a] 

2
奇怪的特性,它成为了列表的头条:https://dev59.com/1XI-5IYBdhLWcg3wJE0K#1995156 - codaddict

0
在C语言中,数组是非常简单的数据结构,由连续的内存块组成。因此,它们需要使用整数作为索引,因为这些索引只是内存地址的偏移量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接