C程序输出理解问题

C程序输出理解问题,c,C,我有以下计划: #include<stdio.h> int main() { int i =257; int *iptr =&i; printf("%d%d",*((char*)iptr),*((char*)iptr+1)); return 0; } 我无法理解为什么第二个值是1。 请解释。第一个值出现1的原因相同。您正在从int一次访问一个字节。由于257是0x0101,因此两个最低有效位字节各自包含值1 您的int可能有4个字节长,并且存储的是小的endian,尽管我

我有以下计划:

#include<stdio.h>
int main()
{
int i =257;
int *iptr =&i;
printf("%d%d",*((char*)iptr),*((char*)iptr+1));
return 0; 
}
我无法理解为什么第二个值是
1

请解释。

第一个值出现1的原因相同。您正在从int一次访问一个字节。由于257是
0x0101
,因此两个最低有效位字节各自包含值1


您的int可能有4个字节长,并且存储的是小的endian,尽管我认为它可能有2个字节长,并且有两个endian。

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


(char*)iptr
iptr
指向的
字符(因此为1字节),而
(char*)iptr+1
是下一个字节。

257十六进制为4字节=0x00000101,在英特尔机器上存储在内存中
同于01 00 00。iptr指向第一个01,iptr+1指向第二个。

请记住,只有当整数是两个字节或是小尾端时,这才是正确的。否则它可能被存储为
0x00,0x00,0x01,0x01
,您将得到
0
作为输出。
1 1