此代码编译但不会生成我期望的结果:
#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
如何检索char
我char&
别名的地址?
答案 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
打印地址。