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

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

Barbara Streisand
Barbara Streisand原创
2025-01-03 14:36:39381浏览

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

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