我偶然发现了包含以下内容的代码:
char c = "abc"[1];
它可以使用 gcc 编译并运行良好!c
将'b'
在此表达式之后。
这个标准是索引文字字符串还是仅仅是运气好?
当然是,字符串文字是数组类型。它被转换为char
表达式中的指针,类似于指向 的任何指针char
。
char c = "abc"[1];
和
char *p = "abc";
char c = p[1];
是等价的。
这完全是标准的。字符串实际上是指向字符数组指针的语法糖,任何指针都可以使用下标表示法。
事实上,a[b]
is 等价于which又*(a + b)
等价于*(b + a)
,这会导致你得到一个稍微令人惊讶的结果:a[b]
b[a]
char c = 1["abc"];
可以发生。
这是标准的,因为由 "" 定义的字符串被转换为可以索引的 char*(char 指针)。该指针的目标始终是 1 char,在您的情况下是 b 。