首页 > 后端开发 > C++ > 为什么 `cout` 不能正确显示 `char` 成员变量的地址?

为什么 `cout` 不能正确显示 `char` 成员变量的地址?

Barbara Streisand
发布: 2025-01-03 14:36:39
原创
395 人浏览过

Why Doesn't `cout` Display the Address of a `char` Member Variable Correctly?

为什么不显示 Char 数据的地址?

考虑以下代码片段:

class Address {
      int i ;
      char b;
      string c;
      public:
           void showMap ( void ) ;
};

void Address :: showMap ( void ) {
            cout << "address of int    :" << &i << endl ;
            cout << "address of char   :" << &b << endl ;
            cout << "address of string :" << &c << endl ;
}
登录后复制

预计输出应该显示int、char 和 string 成员变量的地址。然而,char 变量 b 的地址仍然为空。

原因

出现这种奇怪的情况是因为 <<<运算符将 &b 解释为 C 样式字符串而不是地址。 Char 指针被 << 解释为空终止字符序列。

解决方案

要解决此问题并显示 char 变量的地址,可以使用以下修改后的代码:

cout << "address of char   :" << (void *) &b << endl;
登录后复制

这里,我们使用C 风格强制转换将 &b 显式转换为 void *。这指示 <<运算符将其视为地址而不是字符序列。更安全的替代方法是使用 static_cast:

cout << "address of char   :" << static_cast<void *>(&b) << endl;
登录后复制

另一个有趣的观察

当 int、char 和 string 成员变量声明为 public 时,输出会略有变化:

  ... int    :  something 
  ... char   :   
  ... string :  something_2
登录后复制

这里,something_2 总是比 some 少 8。

出现这种差异是因为编译器会填充公共成员变量,以最佳方式对齐它们以进行内存访问。在这种情况下,char 变量可能被填充为 8 个字节,导致 int 和 string 变量之间的地址存在 8 字节的差异。

以上是为什么 `cout` 不能正确显示 `char` 成员变量的地址?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板