文字字符串索引标准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。