文字データ表示の不一致のアドレス
提供された C コードでは、クラス メンバーのアドレスの出力に異常が見られます。 char データ メンバー "b" は空のスペースとして表示されます。
この動作の理由は、 address-of 演算子と挿入演算子「<<」 char型を解釈します。 「b」のアドレスを取得すると、char * ポインタになります。ただし、挿入演算子はこれを C スタイルの文字列として解釈し、アドレスではなくその内容を出力しようとします。
これを修正するには、「b」アドレスを void ポインタにキャストします。 "(void ) &b" のような C スタイルのキャスト、またはできれば "static_cast
アドレスの違い (文字列と文字) の謎
もう 1 つの観察は、クラス メンバーが int の場合です。 、char、string が public として宣言されている場合、「char」のアドレスは空の文字列として表示されますが、「string」のアドレスと「int」のアドレスの違いは次のようになります。常に 8 (9 ではありません)。
この違いは、オブジェクトがメモリに格納される方法に起因します。文字列データ型は、終端の NULL 文字を含む連続した文字ブロックとして実装されます。この null 文字は、文字列のサイズに実質的に余分なバイトを追加します。
したがって、「string」と「int」のアドレスの差は 8 バイトで、これは文字列データ型のサイズに 1 を加えたものを表します。ヌル終端文字。対照的に、char データ型にはヌル終端文字がないため、アドレスが出力されると空の表示になります。
以上がC コードで「char」メンバーの空のアドレスと、「int」メンバーと「string」メンバーの 8 バイトのアドレスの違いが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。