首页 > 后端开发 > C++ > 为什么打印类中 Char 成员的地址有时会显示为空白,而不是时为什么会有 8 字节的偏移量?

为什么打印类中 Char 成员的地址有时会显示为空白,而不是时为什么会有 8 字节的偏移量?

Susan Sarandon
发布: 2024-12-20 07:50:10
原创
1018 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板