请告诉我为什么以下程序的输出是JKLM?而不是MLKJ?

May*_*ank 1 c unix shift bitwise-operators

Please explain the output of below program....

int main()
{
unsigned int i=0,j=0;
char c = 'J';
         i = (unsigned int) c;
         i|=(unsigned int) (c+1)<<8;
         i|= (unsigned int) (c+2) <<16;
         i|= (unsigned int) (c+3) <<24;
printf("\n%s",&i);
}
Run Code Online (Sandbox Code Playgroud)

以上程序的输出显示为JKLM请解释原因?

小智 7

Standardese挑剔答案:因为你的程序有不确定的行为.该%s转换说明需要一个char *或一个unsigned char *参数,但传递给它的unsigned int *.

后面的幕后回答:您的机器可能是小端,因此最低有效字节的内存地址最低.

  • 如果H2CO3说出来(除了不投射malloc),你应该听. (2认同)
  • @ H2CO3有时当我阅读你的帖子时,你往往会像一个生硬的欺负者一样,但是我们会再次对每天面对的人提出什么样的期待,因为在SO上有一些愚蠢和愚蠢的愚蠢,我继续尽情地笑,享受你的评论 (2认同)