首页 >后端开发 >C++ >为什么我的 C Char 成员地址打印为空白,并且为什么有​​ 8 字节偏移?

为什么我的 C Char 成员地址打印为空白,并且为什么有​​ 8 字节偏移?

Susan Sarandon
Susan Sarandon原创
2025-01-03 02:51:38828浏览

Why Does My C   Char Member's Address Print Blank, and Why Is There an 8-Byte Offset?

调试地址打印异常

在涉及具有 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn