这只是一个测试原型:
#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'的地址是字符类型,而不是打印?
答案 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中重载。它不会与int
或string
等任何其他类型冲突,但它会指向{{1如果使用它会产生不希望的结果。
你可以这样做: -
char