我们如何显示char变量的地址?我找到了一种使用类型转换的解决方案,通过将其转换为int或float或void等,然后使用指针显示地址。但是没有类型铸造的特定解决方案还有其他替代方案吗?使用像
这样的指针char var = 'a';
char* ptr;
ptr = &var;
cout << ptr;
但在这种情况下,即使指针指向var的地址,但显示var的值。为什么?如果是这样那么我们如何使用指针获取var的地址? 不使用类型转换
cout << "Address of var = " << static_cast<void*>(&var) << endl;
或者我们必须为特定问题重载任何操作符?
答案 0 :(得分:7)
你需要编写演员表的唯一原因是因为std::ostream
对char *
有一个特殊的重载,假设给定的指针指向一个元素的第一个元素零终止的字符数组,并且很乐意尝试遍历该数组,直到它达到零。
不幸的是,这意味着您不能简单地传递单个字符的地址并打印该地址的值,这就是您需要强制转换的原因。对于所有其他(非字符)指针,std::ostream
已经打印了指针值的数字表示。
没有任何东西你可以“做”,但也没有真正的问题,因为你已经发现了解决方案。如果您处于通用设置并且想要打印对象指针,那么只需向void *
添加一个转换,它将适用于所有输入类型。 std::ostream
的行为是设计选择的结果,为了方便使绝大多数用例易于使用,代价是使您的特定用例更加冗长。