考慮以下程式碼片段:
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中文網其他相關文章!