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

Posted

技术标签:

【中文标题】使用指针在 C++ 中显示 char 变量的地址?【英文标题】:displaying address of char variable in c++ using pointers? 【发布时间】:2014-10-04 09:55:12 【问题描述】:

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

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

【问题讨论】:

cout &lt;&lt; (void*)ptr; 类型转换到底有什么问题? 您可以在[这里][1] [1]中找到详细的答案:***.com/questions/4860788/… 【参考方案1】:

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

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

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

【讨论】:

我们可以重载 char* 吗? @FaisalNaseer:我不明白。你当然知道重载是如何工作的,但重点是std::ostream 已经 有这样的重载。您不得重新定义标准库的某些部分。 (您可以编写自己的流类并为此定义自己的重载。) 我相信这就是需要说的一切,@FaisalNaseer 你不能用相同的签名定义两个重载,除非你打算使用一个你想要的函数(并且,最后,它将是一个类型转换),您的具体问题没有意义

以上是关于使用指针在 C++ 中显示 char 变量的地址?的主要内容,如果未能解决你的问题,请参考以下文章

单行指针操作

C语言 | C++万字总结下

如何通过JNI将java中的对象的地址赋值给c++指针变量

C++中如何把指针中的值取出来赋给常规变量

char 是啥意思?

char **表示啥意思