首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符类型变量的地址

字符类型变量的地址
EN

Stack Overflow用户
提问于 2013-11-17 16:02:34
回答 3查看 105关注 0票数 3

这里只是一个测试原型:

代码语言:javascript
复制
#include <iostream>
#include <string>
using namespace std;

int main()
{
   int a=10;
   char b='H';
   string c="Hamza";

   cout<<"The value of a is : "<<a<<endl;
   cout<<"The value of b is : "<<b<<endl;
   cout<<"The value of c is : "<<c<<endl<<endl;

   cout<<"address of a : "<<&a<<endl;
   cout<<"address of b : "<<&b<<endl;
   cout<<"address of c : "<<&c<<endl;

   return 0;
}

为什么变量'b‘的地址是字符类型的而不是打印的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-06 12:15:18

代码中的<<运算符在C++ 11中重载,它不与任何其他类型(如intstring )冲突,但它使用指向char的指针,如果使用该指针可能会产生不希望的结果。

你可以这样做:-

代码语言:javascript
复制
cout << static_cast<void*>(&b)
票数 2
EN

Stack Overflow用户

发布于 2013-11-17 16:06:06

<<有一个重载,它接受指向char的指针,并将其解释为终止的C样式字符串。使用这个作为任何其他char的地址将是可怕的错误。

相反,转换为一个没有类型的指针,这样<<就不会变得太聪明了:

代码语言:javascript
复制
cout << static_cast<void*>(&b)
票数 11
EN

Stack Overflow用户

发布于 2013-11-17 16:08:58

表达式&b具有char *类型。当运算符<<使用char *类型的对象时,它将其视为字符串,并将其输出为字符串。若要输出应写入的地址,请执行以下操作

代码语言:javascript
复制
( void * ) &b

代码语言:javascript
复制
reinterpret_cast<void *>( &b )
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20032866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档