首頁 >後端開發 >C++ >為什麼 C 中 Char 變數的位址顯示不正確?

為什麼 C 中 Char 變數的位址顯示不正確?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-03 19:02:43810瀏覽

Why Doesn't the Address of a Char Variable Display Correctly in C  ?

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

考慮此程式碼:

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

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

執行此程式碼時,您可能會注意到 char 變數 'b' 的位址未顯示在輸出中。相反,您會看到一個空白區域。為什麼會發生這種情況?

原因在於位址運算子 (&) 如何處理不同的資料類型。當應用於 char 變數 &b 時,您將獲得一個 char 指針,即 char *。

預設情況下,輸出運算子

要解決此問題,您可以使用以下方法:

cout << "address of char   : " << (void *) &b << endl;

這裡,我們將 b 的位址轉換為 void *,然後再將其與輸出運算子一起使用。這可確保運算子將其視為指向記憶體位置的指針,而不是字元序列。

為什麼位址之間的差異為 8?

如果您將如果將成員變數「int」、「char」和「string」設為 public,您可能會觀察到另一個有趣的行為。 'int' 和 'string' 的位址差始終為 8。這是因為:

  • 大多數架構上 int 的預設對齊方式是 4 個位元組。
  • 預設char 的對齊方式是 1 個位元組。
  • string 的預設對齊方式是 4 bytes.

當編譯器為類別成員分配記憶體時,它會以將它們與各自的邊界對齊的方式進行分配。在本例中,char 變數「b」佔用一個位元組,留下 3 個位元組的未使用空間。該空格後面是字串變數 'c',它與最近的 4 位元組邊界對齊。

因此,'&c' 和'&b' 的位址之間的差將為1 (對於'b') 3 (對於未使用的空間) 4 (對於'c' 的4 個位元組對齊) = 8.

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn