首頁 > 後端開發 > C++ > 為什麼列印類別中 Char 成員的位址有時會顯示為空白,而不是為什麼會有 8 個位元組的偏移量?

為什麼列印類別中 Char 成員的位址有時會顯示為空白,而不是為什麼會有 8 個位元組的偏移量?

Susan Sarandon
發布: 2024-12-20 07:50:10
原創
984 人瀏覽過

Why Does Printing the Address of a Char Member in a Class Sometimes Appear Blank, and Why Is There an 8-Byte Offset When It's Not?

Char 資料顯示異常的位址

在一個包含int、char 和string 等各種類型資料成員的類別的程式中,當列印這些資料成員的地址時,出現了意想不到的觀察結果。顯示 int 和 string 的位址時,char 資料成員的位址顯示為空白。

要解決此問題,請考慮 char 資料類型的底層表示形式。當使用 & 運算子取得 char 變數的位址時,您將取得指向 char 的指標。但是,流插入運算子 (

要修正此行為,請使用 static_cast 將 char 變數的位址明確轉換為 void 指標。透過這樣做,您可以指示流插入運算子將值解釋為位址而不是字串。

<br>cout (&b) 
登入後複製

此外,當類別資料成員被聲明為公共時,會發生一些有趣的事情。現在顯示 char 變數的位址,但與 int 變數的位址相比,偏移量為 8 個位元組。

<br> ... int : Something <br> .. . 字元:something_2<br> ... 字串: some_3<br>
登入後複製

有趣的是,something_2 - some 永遠是8。這源自於應用於類別成員以實現高效能記憶體佈局的填充。 char 變數儘管只佔用 1 個位元組,但由於對齊要求而分配了 4 個位元組。這個 3 位元組填充創建了觀察到的偏移量。

以上是為什麼列印類別中 Char 成員的位址有時會顯示為空白,而不是為什麼會有 8 個位元組的偏移量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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