索引运算符绑定到字符串文字

时间:2015-07-22 22:13:14

标签: c arrays string string-literals c89

所以我决定完全脱离随机性进行实验。 我发现了这个:

"Hello World"[1]

实际上处理第一个视图,导致'e' 即使:

  • 我碰巧在我的代码
  • 之前没有遇到任何问题
  • 似乎在语义上存在争议(或至少非常可疑)
  • 无法在互联网上找到任何有关此正字符串文字数组索引的信息(可能在错误的上下文中搜索?)

这实际上是否允许,面对“标准”并保证定义良好的行为?

2 个答案:

答案 0 :(得分:3)

这在语义上是正确的。 "Hello World"[1]相当于*("Hello World" + 1)。在此表达式中,字符串"Hello World"将转换为指向其第一个元素的指针。因此,("Hello World" + 1)是字符串"Hello World"的第二个元素的地址。

答案 1 :(得分:1)

"Hello World"[1]

完全有效。字符串文字是N个字符的数组类型。 "Hello World"的类型是12 char的数组(即char[12])。