我有以下程序:
#include<stdio.h>
int main()
{
int i =257;
int *iptr =&i;
printf("%d%d",*((char*)iptr),*((char*)iptr+1));
return 0;
}
输出结果为:
1 1
我无法理解为什么第二个值是1
。
请解释一下。
答案 0 :(得分:6)
第一个值出现的原因相同1.您从int一次访问一个字节。由于257是0x0101
,因此两个最低有效字节均包含值1.
可能你的int是4个字节长并且存储了little-endian,尽管我认为它可能是2个字节长并且有任何endian-ness。
答案 1 :(得分:5)
因为二进制中的257是00000001 00000001
:所以表示它的第一个和第二个字节都设置为1.
(char*)iptr
是由char
指向的iptr
(因此是1个字节),而(char*)iptr+1
是下一个字节。
答案 2 :(得分:2)
257十六进制为4字节= 0x00000101,在Intel机器上存储在内存中 如01 01 00 00. iptr指向第一个01,iptr + 1指向第二个。