我如何获得char&amp ;?的地址?

时间:2016-10-01 04:48:37

标签: c++

此代码编译但不会生成我期望的结果:

#include <iostream>

int main()
{
    char h = 'h';
    char& href = h;

    std::cout << &href << std::endl;

    int x = 1;
    int& xref = x;

    std::cout << &xref << std::endl;
}

结果如下:

h
0x22fe38

如何检索charchar&别名的地址?

2 个答案:

答案 0 :(得分:3)

只需将其投放到void*

std::cout << (void*)&href << std::endl;

您正在打印原始字符,因为std::ostream具有与此类似的功能:

 std::ostream& operator<<(std::ostream& os, char const* val);

当你要求一个角色的地址时,你得到一个char*;与任何其他类型一样,&运算符的地址返回指向该类型的指针。由于char*转换为char const*,因此调用前面提到的函数,就像它是一个以空字符结尾的字符串一样。

答案 1 :(得分:2)

  

如何检索char char&amp; char的地址?是别名吗?

表达式为&href

您看到的问题是由于&href的类型为char*。因此,

std::cout << &href << std::endl

尝试打印以空字符结尾的字符串。你可以使用

std::cout << (void*)&href << std::endl

打印地址。