1

我们如何显示 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;

或者我们必须为特定问题重载任何运算符?

4

1 回答 1

8

您需要编写强制转换的唯一原因是因为std::ostream有一个特殊的重载,char *假定给定的指针指向一个以零结尾的字符数组的第一个元素,并且会很高兴地尝试遍历该数组直到它达到零。

不幸的是,这意味着您不能简单地传递单个字符的地址并打印该地址的值,这就是您需要强制转换的原因。对于所有其他(非字符)指针,std::ostream已经打印了指针值的数字表示。

没有什么可以“做”的,但也没有真正的问题,因为您已经找到了解决方案。如果您处于通用设置中并且想要打印对象指针,那么只需添加一个强制转换void *,它将适用于所有输入类型。的行为std::ostream是为了方便而进行的设计选择的结果,以使绝大多数用例易于工作,但代价是使您的特定用例编写起来更加冗长。

于 2014-10-04T10:03:51.727 回答