字符类型变量的地址

时间:2013-11-17 16:02:34

标签: c++ character memory-address

这只是一个测试原型:

#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'的地址是字符类型,而不是打印?

3 个答案:

答案 0 :(得分:11)

<<有一个重载,它指向char并将其解释为终止的C风格字符串。将其用作任何其他char的地址将会出现严重错误。

相反,转换为无类型指针,以便<<不会太聪明:

cout << static_cast<void*>(&b)

答案 1 :(得分:3)

表达式&amp; b具有char *类型。当运算符&lt;&lt;用于char *类型的对象,它将其视为字符串并将其作为字符串输出。要输出你应该写的地址

( void * ) &b

reinterpret_cast<void *>( &b )

答案 2 :(得分:2)

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

你可以这样做: -

char