代码:
int main()
{
unsigned int a = 0xfffffff7;
char *b = (char *)&a;
printf("%08x",*b);
}
输出为:fffffff7
。
我的机器是小端的。我当然知道*b
等于0xf7
,但我不知道为什么printf()
的输出是这样的。
答案 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);
//表示:
*b
询问值b指针(F7)
%08x
要求输入十六进制,当打印一个整数类型的字符时,它会在打印前加宽为int 。 (现在是FFFFFF7)