3

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

char c = "abc"[1];

它可以使用 gcc 编译并运行良好!c'b'在此表达式之后。

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

4

3 回答 3

7

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

char c = "abc"[1];

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

是等价的。

于 2012-07-16T11:25:07.327 回答
4

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

事实上,a[b]is 等价于which又*(a + b)等价于*(b + a),这会导致你得到一个稍微令人惊讶的结果:a[b]b[a]

char c = 1["abc"];

可以发生。

于 2012-07-16T11:33:45.700 回答
0

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

于 2012-07-16T11:26:48.123 回答