1
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);
}

上述程序的输出显示为 JKLM 请解释为什么?

4

2 回答 2

7

标准的挑剔答案:因为您的程序具有未定义的行为。%s转换说明符需要一个或char *一个unsigned char *参数,但你传递给它一个unsigned int *.

幕后回答:你的机器可能是小端的,所以最低有效字节具有最低的内存地址。

于 2013-09-21T06:28:42.607 回答
3

您的系统似乎是小端(http://en.wikipedia.org/wiki/Endianness)。这意味着最低有效字节(没有移位的字节)是 %s 期望的字符数组中的第一个字节。

于 2013-09-21T06:28:23.070 回答