#include <iostream.h>int main()
{
unsigned int str[5];// printf("%d", sizeof(int)); 

str[0] = 0x44004241; // 'A'的ASCII码是41 
str[1] = 0;
str[2] = 0;
str[3] = 0;
str[4] = 0;

/*
unsigned char *pCh = NULL;
pCh = (unsigned char *)str;
cout << *pCh << endl;
*/

printf("%s", str); // 结果是AB

getchar();
return 0;
}

解决方案 »

  1.   

    char包含8个二进制位,转化成unsigned char *的时候先存储41,再存储42,所以输出AB了.
      

  2.   

    为什么输入的是0x44004241,从字面上看应该到内存存放也是44004241,但是实际上在内存存放是41420044这个顺序why???
      

  3.   

    因为x86结构的cpu是这么定的。
      

  4.   

    因为x86结构的cpu是这么定的。
    有么有详细一点的解释哦我求知望也强耶
      

  5.   

    和putwc( c, stdout );类似.把单个字符写到输出流的当前位置上.
      

  6.   

    这个应该叫Byte order吧,分别叫little-endian(低位在后)和big-endian(高位在后),似乎是因为历史原因造成的。
    当初intel设计他们的cpu就这么定的,当然也有cpu不是这样的,比如Motolora的。
    他为什么这么设计,就不知道了。
      

  7.   

    谢谢idAnts(你才无聊呢) 的解释
      

  8.   

    想想看,当年intel的cpu还是8088的时候,处理字长是16bits是很先进的cpu了,并没有多少基于它的专有软件。他考虑了低位在前高位在后的字节序是为了跟更早的8位计算兼容,那年月很多软件用汇编写的。
    这样当汇编代码是
    mov al,byte ptr [1234h]
    adc cl,al
    的代码就可以很自然地升级为
    mov ax,word ptr [1234h]
    adc cx,dx
    因为在做了操作字对齐以后原来代码中数据段的1234这个地址的数据高位为0,保留了兼容。
    还有一些基于栈跳转的技巧更是byte必争。所以intel的字节序就这么定下来了