アドレス印刷の奇妙さのデバッグ
int、char、および string データ メンバーを持つクラスを含む C プログラムで、それらのアドレスを印刷すると、眉。 char メンバーにアクセスすると、不思議なことに出力が空白のままになります。さらに、パブリック char メンバーを void ポインターにキャストすると、オフセット 8 が明らかになり、さらなる調査が必要になります。
Missing Char Address:
空白の char アドレスの問題出力は & 演算子の解釈方法によって決まります。デフォルトでは、char 変数で & を使用すると、C スタイルの文字列 (char) へのポインターが返されます。これにより、<< のオーバーロードが発生します。文字列ストリームの演算子を使用して、変数を文字の配列として扱い、アドレスではなく文字列として出力します。
問題の解決:
char メンバーのアドレスを正しく指定するには、void* への明示的なキャストが必要です。このキャストは、ポインタを汎用ポインタとして扱う必要があることを示し、<<演算子がそれを C 文字列として解釈しないようにします。修正されたコード:
cout << "address of char :" << (void*) &b << endl;
あるいは、最新の C でポインタをキャストするには static_cast を使用する方が安全で推奨される方法です。
cout << "address of char :" << static_cast( &b ) << endl; Public Members の 8 のオフセット:
int、char、string メンバーが public の場合、それらの間のオフセットchar および string メンバーのアドレスは常に 8 です。これは、パブリック クラスでは、メンバー変数が宣言された順序でクラス構造内に配置されるためです。したがって、string メンバーは 8 バイトの固定オフセットで char メンバーの後に続きます。
以上がC Char メンバーのアドレスが空白で印刷され、8 バイトのオフセットがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。