调试地址打印异常
在涉及具有 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中文网其他相关文章!