了解C程序输出的问题

时间:2011-01-22 14:32:50

标签: c

我有以下程序:

#include<stdio.h>
int main()
{
int i =257;
int *iptr =&i;
printf("%d%d",*((char*)iptr),*((char*)iptr+1));
return 0; 
}

输出结果为:

1 1

我无法理解为什么第二个值是1。 请解释一下。

3 个答案:

答案 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指向第二个。