C++问题,对答案不理解


void test119()
{
    int a = 4407873;
    cout << (char*)&a << endl;



}

答案为什么是ABC,希望详细一点。

a的值是4407873,即0x00434241,在小端机器上的内存排列是0x41, 0x42, 0x43, 0x00,即"ABC\0"
cout << (char*)&a << endl;意思去a的地址并把指针强制转换为指向字符的指针,然后按字符串输出,输出的结果就是ABC

误导人的代码,不理解也没事

无法解释,可以用来转移指针,但是具体为啥解释不了;可以看看下面的:
http://blog.csdn.net/race604/article/details/6725475

把这个数字转换成16进制,是434241恰好是3个字节。而int是4个字节所以最后的内存数据是00,43,42,41。
如果c采用little endian的字节存放机制,即把数据的低位存放在低编号的内存字节单元,则数据在内存中的实际存放形式是41,42,43,00。
当把这一段东西当作char数组输出时,一个char占一个字节,于是会依次输出ascii码为0x41,0x42,0x43对应的字符,最后碰到0x00被当作字符串结束符