我偶然发现了包含以下内容的代码:
char c = "abc"[1];
它用gcc编译并运行良好!在此表达之后c
将为'b'
。
这个标准是索引文字字符串还是运气好吗?
答案 0 :(得分:6)
当然是,字符串文字是数组类型。它被转换为表达式中char
的指针,就像任何指向char
的指针。
char c = "abc"[1];
和
char *p = "abc";
char c = p[1];
是等价的。
答案 1 :(得分:3)
这完全是标准的。字符串实际上是指向字符数组的指针的一段语法糖,任何指针都可以使用下标表示法。
事实上,a[b]
相当于*(a + b)
,而*(b + a)
相当于a[b]
,这会导致b[a]
等同于{char c = 1["abc"];
的轻微惊人结果1}},这就是为什么在某些代码中(特别是,但不幸的是,在混淆的代码竞争中),这类事情:
{{1}}
可能会发生。
答案 2 :(得分:0)
这是标准的,因为由“”定义的字符串转换为可以索引的char *(char指针)。该指针的目标始终为1个字符,在您的情况下为b。