未定義の動作が変数の 2 つの異なる値を説明する方法
逆説的に見えるかもしれませんが、同じアドレスにある変数については可能です2 つの異なる値を生成します。この現象は、未定義の動作が原因である可能性があります。
提供されたコード スニペットでは、定数整数 (a1) が定義され、定数ポインター (b1) にそのアドレスが割り当てられます。続いて、b1からcharポインタ(c1)がキャストされます。 c1 を変更すると、定数として宣言されているにもかかわらず、a1 の値が事実上変更されます。 c1 を整数ポインタ (t) にキャストして戻すと、この変更された値が明らかになります。
const 変数を変更しようとする試みは C 標準に違反するため、これらのアクションは未定義の動作になります。セクション 7.1.6.1 で指定されているように、そのような動作は、観察されたような一見不可能な結果を含む、予測不可能な結果につながる可能性があります。
標準では、そのような動作に対して明確に警告しています。
したがって、観察された動作は奇妙に思えるかもしれませんが、これはコンパイラの最適化ではなく、定数変数を変更しようとする試みから生じる未定義の動作の症状です。
以上がC の const 変数はどのようにして 2 つの異なる値を持つことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。