5

重複の可能性:
C 配列では、なぜこれが正しいのですか? [5] == 5[a]

これが有効な C++ である可能性はありますか?

void main()
{
  int x = 1["WTF?"];
}

VC++10 では、これはコンパイルされ、デバッグ モードでxは、ステートメントの後の値は 84 です。

どうしたの?

4

3 に答える 3

9

配列添字演算子は交換可能です。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]

于 2013-01-17T12:04:39.757 に答える
3
int x = 1["WTF?"];

に等しい

int x = "WTF?"[1];

84 は "T" アスキー コードです。

于 2013-01-17T12:03:47.807 に答える
1

これが機能する理由は、組み込み演算子[]がポインターと int に適用されると、a[b]と同等になるため*(a+b)です。どちら (加算は交換可能) は と同等*(b+a)であり、 の定義により[]、 は と同等b[a]です。

于 2013-01-17T12:29:24.133 に答える