我有以下程序:
#include<stdio.h>
int main()
{
int i =257;
int *iptr =&i;
printf("%d%d",*((char*)iptr),*((char*)iptr+1));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
1 1
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么第二个值是1.请解释.
第一个值出现的原因相同1.您从int一次访问一个字节.从257开始0x0101,两个最低有效字节每个都包含值1.
可能你的int是4个字节长并且存储了little-endian,尽管我认为它可能是2个字节长,并且有两个endian-ness.
因为二进制中的257是00000001 00000001:所以表示它的第一个和第二个字节都设置为1.
(char*)iptr是char指向的(因此是1个字节)iptr,并且(char*)iptr+1是下一个字节.