首頁 > 後端開發 > C++ > 為什麼 `cout` 不能正確顯示 `char` 成員變數的位址?

為什麼 `cout` 不能正確顯示 `char` 成員變數的位址?

Barbara Streisand
發布: 2025-01-03 14:36:39
原創
382 人瀏覽過

Why Doesn't `cout` Display the Address of a `char` Member Variable Correctly?

為什麼不顯示 Char 資料的位址?

考慮以下程式碼片段:

class Address {
      int i ;
      char b;
      string c;
      public:
           void showMap ( void ) ;
};

void Address :: showMap ( void ) {
            cout << "address of int    :" << &i << endl ;
            cout << "address of char   :" << &b << endl ;
            cout << "address of string :" << &c << endl ;
}
登入後複製

預期輸出應該顯示int、char 和 string 成員變數的位址。然而,char變數b的位址仍然是空白。

原因

出現這種奇怪的情況是因為<<<運算子將 &b 解釋為 C 樣式字串而不是位址。 Char 指標以 << 解釋為空終止字元序列。

解決方案

要解決此問題並顯示char 變數的位址,可以使用以下修改的程式碼:

cout << "address of char   :" << (void *) &b << endl;
登入後複製

這裡,我們使用C 風格強制轉換將&b 明確轉換為void *。這指示 <<運算符將其視為位址而不是字元序列。更安全的替代方法是使用static_cast:

cout << "address of char   :" << static_cast<void *>(&b) << endl;
登入後複製

另一個有趣的觀察

當int、char 和string 成員變數宣告為public 時,輸出會略有變化:

  ... int    :  something 
  ... char   :   
  ... string :  something_2
登入後複製

這裡,something_2 總是比some 少8。

出現這種差異是因為編譯器會填充公共成員變量,以最佳方式對齊它們以進行記憶體存取。在這種情況下,char 變數可能被填入 8 個位元組,導致 int 和 string 變數之間的位址存在 8 個位元組的差異。

以上是為什麼 `cout` 不能正確顯示 `char` 成員變數的位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板