使用指针在 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 << (void*)ptr;
类型转换到底有什么问题?
您可以在[这里][1] [1]中找到详细的答案:***.com/questions/4860788/…
【参考方案1】:
您需要编写强制转换的唯一原因是因为std::ostream
对char *
有一个特殊的重载,它假设给定的指针指向一个以零结尾的数组的第一个元素字符,并且会很高兴地尝试遍历该数组,直到它达到零。
不幸的是,这意味着您不能简单地传递单个字符的地址并打印该地址的值,这就是您需要强制转换的原因。对于所有其他(非字符)指针,std::ostream
已经打印出指针值的数字表示。
没有什么可以“做”的,但也没有真正的问题,因为您已经找到了解决方案。如果您处于通用设置中并且想要打印对象指针,那么只需将强制转换添加到void *
,它将适用于所有输入类型。 std::ostream
的行为是为了方便而进行的设计选择的结果,以使绝大多数用例易于工作,但代价是使您的特定用例编写起来更加冗长。
【讨论】:
我们可以重载 char* 吗? @FaisalNaseer:我不明白。你当然知道重载是如何工作的,但重点是std::ostream
已经 有这样的重载。您不得重新定义标准库的某些部分。 (您可以编写自己的流类并为此定义自己的重载。)
我相信这就是需要说的一切,@FaisalNaseer 你不能用相同的签名定义两个重载,除非你打算使用一个你想要的函数(并且,最后,它将是一个类型转换),您的具体问题没有意义以上是关于使用指针在 C++ 中显示 char 变量的地址?的主要内容,如果未能解决你的问题,请参考以下文章