了解C程序输出的问题

Pra*_*hal 2 c

我有以下程序:

#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.请解释.

Ste*_*sop 6

第一个值出现的原因相同1.您从int一次访问一个字节.从257开始0x0101,两个最低有效字节每个都包含值1.

可能你的int是4个字节长并且存储了little-endian,尽管我认为它可能是2个字节长,并且有两个endian-ness.


peo*_*oro 5

因为二进制中的257是00000001 00000001:所以表示它的第一个和第二个字节都设置为1.

(char*)iptrchar指向的(因此是1个字节)iptr,并且(char*)iptr+1是下一个字节.

  • 请记住,只有当您的整数是两个字节或者您是小端时,才会出现这种情况.否则它可能存储为"0x00,0x00,0x01,0x01",你将得到"0 0"作为输出. (3认同)