如何解释C程序的这个输出

时间:2013-08-18 13:33:35

标签: c

代码:

int main()
{
    unsigned int a = 0xfffffff7;
    char *b = (char *)&a;
    printf("%08x",*b);
}

输出为:fffffff7。 我的机器是小端的。我当然知道*b等于0xf7,但我不知道为什么printf()的输出是这样的。

2 个答案:

答案 0 :(得分:4)

由于您的系统是小端,a作为F7 FF FF FF存储在内存中。

b指向a的第一个字节。 (F7)

*b评估为char。 (F7)

*b被提升为int,以便将其作为参数传递,因为它的类型为char(通常默认为signed char)扩展为FFFFFFF7

答案 1 :(得分:1)

 +-----------------------+
 |  F7   <--b=(char *) &a|
 |  FF                   |
 |  FF                   |
 |  FF                   |
 |                       |
 +-----------------------+


 printf("%08x",*b);

//表示:

  1. *b询问值b指针(F7)

  2. %08x要求输入十六进制,当打印一个整数类型的字符时,它会在打印前加宽为int 。 (现在是FFFFFF7)