ホームページ > バックエンド開発 > C++ > C Char メンバーのアドレスが空白で印刷され、8 バイトのオフセットがあるのはなぜですか?

C Char メンバーのアドレスが空白で印刷され、8 バイトのオフセットがあるのはなぜですか?

Susan Sarandon
リリース: 2025-01-03 02:51:38
オリジナル
841 人が閲覧しました

Why Does My C   Char Member's Address Print Blank, and Why Is There an 8-Byte Offset?

アドレス印刷の奇妙さのデバッグ

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート