ホームページ > バックエンド開発 > C++ > C コードで「char」メンバーの空のアドレスと、「int」メンバーと「string」メンバーの 8 バイトのアドレスの違いが表示されるのはなぜですか?

C コードで「char」メンバーの空のアドレスと、「int」メンバーと「string」メンバーの 8 バイトのアドレスの違いが表示されるのはなぜですか?

DDD
リリース: 2024-12-30 02:38:09
オリジナル
973 人が閲覧しました

Why Does My C   Code Show an Empty Address for a `char` Member and an 8-Byte Address Difference Between `int` and `string` Members?

文字データ表示の不一致のアドレス

提供された C コードでは、クラス メンバーのアドレスの出力に異常が見られます。 char データ メンバー "b" は空のスペースとして表示されます。

この動作の理由は、 address-of 演算子と挿入演算子「<<」 char型を解釈します。 「b」のアドレスを取得すると、char * ポインタになります。ただし、挿入演算子はこれを C スタイルの文字列として解釈し、アドレスではなくその内容を出力しようとします。

これを修正するには、「b」アドレスを void ポインタにキャストします。 "(void ) &b" のような C スタイルのキャスト、またはできれば "static_cast(&b)" のようなより安全な代替キャストを使用します。これにより、"b" のアドレスが正しく出力されることが保証されます。

アドレスの違い (文字列と文字) の謎

もう 1 つの観察は、クラス メンバーが int の場合です。 、char、string が public として宣言されている場合、「char」のアドレスは空の文字列として表示されますが、「string」のアドレスと「int」のアドレスの違いは次のようになります。常に 8 (9 ではありません)。

この違いは、オブジェクトがメモリに格納される方法に起因します。文字列データ型は、終端の NULL 文字を含む連続した文字ブロックとして実装されます。この null 文字は、文字列のサイズに実質的に余分なバイトを追加します。

したがって、「string」と「int」のアドレスの差は 8 バイトで、これは文字列データ型のサイズに 1 を加えたものを表します。ヌル終端文字。対照的に、char データ型にはヌル終端文字がないため、アドレスが出力されると空の表示になります。

以上がC コードで「char」メンバーの空のアドレスと、「int」メンバーと「string」メンバーの 8 バイトのアドレスの違いが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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