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]はと同等であり、これはと*(a + b)同等*(b + a)のわずかに驚くべき結果につながります。これが、一部のコード(特に、難読化されたコードの競合では、残念ながら排他的ではありません)でこの種のことを行う理由です。 :a[b]b[a]

char c = 1["abc"];

起こるかもしれない。

于 2012-07-16T11:33:45.700 に答える
0

"" で定義された文字列は、索引付けできる char* (char ポインター) に変換されるため、これは標準です。そのポインターのターゲットは常に 1 文字で、これはあなたの場合は b です。

于 2012-07-16T11:26:48.123 に答える