为什么没有显示字符数据的地址?

为什么没有显示字符数据的地址?

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 ;}

产出如下:

         address of int    :  something
         address of char   :     // nothing, blank area, that is nothing displayed
         address of string :  something

为什么?

另一件有趣的事情是:如果int、char、string是公开的,那么输出是

  ... int    :  something 
  ... char   :   
  ... string :  something_2

something_2 - something总是等于8。为什么?(不是9)


子衿沉夜
浏览 442回答 3
3回答

烙印99

当你取b的地址时,你会得到char *.&nbsp;operator<<将其解释为C字符串,并尝试打印字符序列而不是其地址。试一试cout << "address of char &nbsp; :" << (void *) &b << endl相反。[编辑]与Tomek注释一样,在本例中使用的一个更合适的强制转换是static_cast,这是一个更安全的选择。下面是一个使用它而不是C风格的强制转换的版本:cout&nbsp;<<&nbsp;"address&nbsp;of&nbsp;char&nbsp;&nbsp;&nbsp;:"&nbsp;<<&nbsp;static_cast<void&nbsp;*>(&b)&nbsp;<<&nbsp;endl;
打开App,查看更多内容
随时随地看视频慕课网APP