代码如下
# include<stdio.h>
int main()
{
unsigned int a = 0xfffffff7 ;
unsigned char i = (unsigned char)a ;
char *b = (char *)&a ;//让b指向a的地址
printf ("%x, %x\n", i, *b) ;//不懂:*b应该是char类型的,为什么结果会是4个字节?
printf ("%08x, %08x\n", i, *b) ;
return 0 ;
}
/*
result:
f7, fffffff7
000000f7, fffffff7
*/
printf ("%x, %x\n", i, *b) ;//*b应该是char类型的,为什么结果是fffffff7,是4个字节?
你是强制它输出4个字节,FF是填充上去的,你设定了08
若是32位机,则指针占4字节,若是64位机,则指针占8字节......
答案就在这里:c语言指针问题
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。
说错了。。。。。你在输出的时候,虽然B是一个指针,但是他是指向一个INT型的数据,你用%X输出,编译器会去这个地址去这个数据,一看,是个Int,就全打出来。*B是fffffff7的首地址,
我说的对吗? ^_^
printf ("%x, %x\n", (char)0xf7, *b) ;
这样你就明白了。(result: fffffff7, fffffff7 )