0

特定のデータ型のポインターにランダムなアドレスを割り当てました。次に、その特定のアドレスに値を格納しました。プログラムを実行すると、突然終了します。

char *c=2000;
*c='A';
printf("%u",c);
printf("%d",*c);

c最初のprintfステートメントでの値を出力できます。しかし、そのアドレスに格納されている値を 2 番目のアドレスから取得できませんでした。Cygwin GCC コンパイラとオンライン ideone.com コンパイラで実行しました。ideone.com コンパイラでは、ランタイム エラーが表示されます。この背後にある理由は何ですか?

4

2 に答える 2

1

char *c=2000;

ポインターへの整数値の割り当て (および初期化) は、実装定義の動作です。

実装定義の動作は、ISO C 標準のセクション 3.4.1 で次のように定義されています。

各実装が選択がどのように行われたかを文書化する不特定の動作

例 実装定義の動作の例は、符号付き整数が右にシフトされたときの上位ビットの伝播です。

実装定義の動作に依存するコードは、特定のプラットフォームやコンパイラでのみ動作することが保証されています。移植可能なプログラムは、そのような動作を避けるように努めるべきです。

于 2013-11-08T06:53:48.177 に答える