文字字符串索引标准C?

我偶然发现包含以下内容的代码:

char c = "abc"[1]; 

它用gcc编译并运行良好! 在此表达式后c将为'b'

这个标准是索引文字字符串还是它运气好吗?

当然是,字符串文字是数组类型。 它被转换为表达式中指向char指针,就像任何指向char指针。

 char c = "abc"[1]; 

 char *p = "abc"; char c = p[1]; 

是等价的。

这完全是标准的。 字符串实际上是指向字符数组的指针的一段语法糖,任何指针都可以使用下标表示法。

事实上, a[b]等价于*(a + b) ,而*(b + a)又相当于*(b + a) ,这导致a[b]等价于b[a]的略微令人惊讶的结果,这就是为什么在某些代码中(特别是,但遗憾的是,不仅仅是在混淆的代码竞赛中),这类事情:

 char c = 1["abc"]; 

可以发生。

这是标准的,因为由“”定义的字符串转换为可以索引的char *(char指针)。 该指针的目标始终为1个char,在您的情况下为b。