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中文网其他相关文章!