int main()
{
int a=0x12345678;
int a1=0xffffffff;
char *b=(char *)&a;
char *b1=(char *)&a1;
printf("%08x,%08x\n",*b,*b1);
system("pause");
}
输出是 00000078 和 ffffffff
求大神解释,为什么12345678前六位没有,而后面那个又有
那是巧合,因为所有的内存地址被默认初始化为ff了
你可以把第二个改成ffeeffee看看
http://codepad.org/K7qrsrTk
你会发现输出是 ffffffee
主要看位数
int是2个字节,char是1个字节
12345678转换成位数是101111000110000101001110,取低8位就是01001110,等于78
另一个一样
估计是因为char是有符号的,因此如果char高位是1,那么就会用1填充,否则用0填充
int a=0x12345688;
输出ffffff88
是的,@caozhy说的对,po主定义a、a1时候,lets say,默认其实是 unsigned int,是无符号的;
但是定义char指针时候,默认是有符号的;
定义时候改成
unsigned char *b1=(char *)&a1;
就能输出000000ff
可以参考这个:http://blog.csdn.net/xiaoshengyige/article/details/11836699
这个问题不必纠结。因为X是为unsigned int准备的,而你的待输出参数是char类型,所以在C标准中这是一个未定义行为。
//用 unsigned char 就都一样了。
#include
#include
int main()
{
int a=0x12345678;
int a1=0xffffffff;
unsigned char *b=(unsigned char *)&a;
unsigned char *b1=(unsigned char *)&a1;
printf("%08x,%08x\n",*b,*b1);
// system("pause");
}