為什麼不顯示 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。這是因為:
當編譯器為類別成員分配記憶體時,它會以將它們與各自的邊界對齊的方式進行分配。在本例中,char 變數「b」佔用一個位元組,留下 3 個位元組的未使用空間。該空格後面是字串變數 'c',它與最近的 4 位元組邊界對齊。
因此,'&c' 和'&b' 的位址之間的差將為1 (對於'b') 3 (對於未使用的空間) 4 (對於'c' 的4 個位元組對齊) = 8.
以上是為什麼 C 中 Char 變數的位址顯示不正確?的詳細內容。更多資訊請關注PHP中文網其他相關文章!