重複の可能性:
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]
です。