任何人都可以根据指针解释这个程序的输出吗?

时间:2016-03-05 07:55:26

标签: c++

#include<iostream> 
using namespace std;
int main() 
{ 
 int a; 
 char *x; 
 x = (char *) &a; 
 a = 2; 
  cout<<"a"<<x<<"p"<<*x<<"d\n";
 x[0] = 1; 
 x[1] = 2; 
 cout<<a;
 return 0;
}

输出

apd

513

这个问题是geeksforgeeks.org的修改形式。第二份印刷声明背后的原因对我来说很清楚。我无法理解为什么x的值和地址是空白的。 注意:第二个输出取决于机器。它在小端机器中的值是513

1 个答案:

答案 0 :(得分:0)

operator<<的{​​{1}}的{​​{1}}已超载ostream。它认为指针接收到指向空终止的C字符串的指针并尝试打印字符串。如果要打印指针值,则需要将其转换为const char*,例如:

void *

再次为cout << static_cast<void*>(x) << endl; 类型重载了operator<<。它打印字符,而不是整数值。如果要查看下面的实际整数值,则需要将char转换为另一个整数类型:

char