-2

C で、次の結果 x[1] が 2 になるのはなぜですか?

int a = 2, x;
...
printf("x[1] = ", &x[1])
4

1 に答える 1

1

そうではありません。これにより、未定義の動作が発生し、何かが発生する可能性があります。定義された方法で、配列の末尾を超える要素にアクセスすることはできません。

発生する可能性が最も高いのは、がスタックのa「上」にあるため、 と同じアドレスを持つことになりますが、それは決して保証されません。xx[1]a

もちろん、これはあなたprintfのタイプミスが前提です。そのままでは、コンパイルさえしません。質問のタイトルは出力ではなくのについて尋ねているだけなので、タイプミスだと思います。x[1]

それを機能させるには、次のようなものを使用する必要があります。

printf ("x[1] = %d\n", (&x)[1]);

これも私のシステムで印刷2されますが、他の場所ではまったく異なることを行う可能性があります。

于 2012-11-03T02:58:00.863 に答える