偵錯位址列印異常
在涉及具有int、char 和string 資料成員的類別的C 程式中,列印它們的位址會引發眉。當訪問 char 成員時,輸出神秘地保持空白。此外,將公共 char 成員轉換為 void 指標會顯示偏移量為 8,需要進一步調查。
缺少 Char 位址:
空白 char 位址的問題輸出源自於 & 運算子的解釋方式。預設情況下,在 char 變數上使用 & 將傳回指向 C 樣式字串 (char) 的指標。這會導致過載
解決問題:
列印char 成員的位址正確,需要明確轉換為 void*。此強制轉換表明該指針應被視為通用指針,從而防止
cout << "address of char :" << (void*) &b << endl;
或者,使用static_cast 是在現代C 中轉換指針的更安全且首選的方法:
cout << "address of char :" << static_cast<void*>( &b ) << endl;
公共成員中的偏移量為8:
當int、char、string成員為public時,位址之間的偏移量char 和 string 成員的總數總是 8。這是因為在公共類別中,成員變數按照宣告的順序排列在類別結構中。因此,字串成員位於字元成員之後,固定偏移量為 8 個位元組。
以上是為什麼我的 C Char 成員位址會列印為空白,為什麼有 8 位元組偏移?的詳細內容。更多資訊請關注PHP中文網其他相關文章!