【发布时间】:2013-11-19 10:18:25
【问题描述】:
struct myStruct
{
int foo;
}
myStruct bar;
bar.foo = 123;
cout<<(char *) &bar<<endl;
cout 语句打印出'{'。 123 的 ASCII 实际上是 '{' (bar.foo = 123。改变这个值会打印出不同的字符)。我不明白的是
cout<<(char *) &bar<<endl;
技术上应该打印酒吧的地址。如何使用 (char *) 强制转换访问结构内的数据?使用 (int *) 仍然返回地址。我确实知道 (char *) 会导致数据以逐字节的方式排列,但这不应该只影响地址吗?
【问题讨论】:
-
std::cout将char *视为以 null 结尾的字符串并按原样打印。bar::foo地址等于bar地址本身。所以你打印bar::foo,就好像它是一个以空结尾的字符串。请注意,它将打印到\0,因此它可能会超过bar::foo,具体取决于它的值。 -
你很幸运没有崩溃,因为它会读取内存直到第一个'\0'......在访问禁区之前不能保证你有一个。