使用指针在c ++中显示char变量的地址?

Fai*_*eer 1 c++ pointers char variable-address

我们怎样才能显示char变量的地址?我找到了一种使用类型转换的解决方案,通过将其转换为int或float或void等,然后使用指针显示地址.但是没有类型铸造的特定解决方案还有其他替代方案吗?使用像指针一样

char var = 'a'; 
char* ptr; 
ptr = &var; 
cout << ptr;
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,即使指针指向var的地址,但显示var的值.为什么?如果是这样那么我们如何使用指针获取var的地址?不使用类型铸造

cout << "Address of var = " << static_cast<void*>(&var)  << endl;
Run Code Online (Sandbox Code Playgroud)

或者我们必须为特定问题超载任何操作员?

Ker*_* SB 7

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

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

没有任何东西你可以"做",但也没有真正的问题,因为你已经发现了解决方案.如果您处于通用设置并且想要打印对象指针,那么只需添加一个转换void *,它将适用于所有输入类型.这种行为std::ostream是为了方便设计选择的结果,使绝大多数用例易于使用,代价是使您的特定用例更加冗长.

  • 我相信这就是需要说的一切,@ FaisalNaseer你不能用相同的签名定义两个重载,除非你打算使用一个你想要的功能(最后,它将是一个类型转换),你的具体问题没有意义 (2认同)