重複の可能性:
C 配列では、なぜこれが正しいのですか? [5] == 5[a]
これが有効な C++ である可能性はありますか?
void main()
{
int x = 1["WTF?"];
}
VC++10 では、これはコンパイルされ、デバッグ モードでxは、ステートメントの後の値は 84 です。
どうしたの?
配列添字演算子は交換可能です。int x = "WTF?"[1];Here"WTF?"は 5 の配列char(null ターミネータを含む) であり、暗黙的に変換された[1]2 番目の文字が返され、値は 84 になります。'T'int
トピック外: コード スニペットは有効な C++ ではありません。実際には -mainを返す必要がありintます。
ここでより詳細な議論を読むことができます: In C arrays why is this true? [5] == 5[a]
int x = 1["WTF?"];
に等しい
int x = "WTF?"[1];
84 は "T" アスキー コードです。
これが機能する理由は、組み込み演算子[]がポインターと int に適用されると、a[b]と同等になるため*(a+b)です。どちら (加算は交換可能) は と同等*(b+a)であり、 の定義により[]、 は と同等b[a]です。