ホームページ >バックエンド開発 >C++ >C では、同じメモリ アドレスにある const 変数が異なる値を示すのはなぜですか?

C では、同じメモリ アドレスにある const 変数が異なる値を示すのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-28 17:26:14833ブラウズ

Why Does a Const Variable at the Same Memory Address Show Different Values in C  ?

異なる値を生成する同じアドレスの変数

次のコード スニペットを考えてみましょう:

#include <iostream>
using namespace std;

int main(void)
{
    const int a1 = 40;
    const int* b1 = &a1;
    char* c1 = (char *)(b1);
    *c1 = 'A';
    int *t = (int*)c1;

    cout << a1 << " " << *t << endl;
    cout << &a1 << " " << t << endl;

    return 0;
}

このコードは驚くべき出力を示します:

40 65
0xbfacbe8c 0xbfacbe8c

どうやってそれが可能ですか同じアドレスの変数 a1 が 40 と 65 という 2 つの異なる値を生成しますか?

答え:

この動作は、未定義の動作の結果です。このコードは const 変数 (a1) の値を変更し、C の規則に違反します。 C 標準 (セクション 7.1.6.1 段落 4) によれば、const オブジェクトの存続期間中にそのオブジェクトを変更しようとすると、未定義の動作が発生します。

この場合、ポインタ c1 を介して const 変数 a1 を変更すると、次のようになります。予測できない結果。コンパイラーは、文書化された方法で変更や動作を無視したり、プログラムを終了したりする場合があります。

したがって、a1 が 2 つの異なる値を生成するという観察された動作は、未定義の動作の結果です。 const 変数の変更は強くお勧めできません。予期せぬ誤ったプログラムの動作につながる可能性があります。

以上がC では、同じメモリ アドレスにある const 変数が異なる値を示すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。