为什么以下打印它的作用?

时间:2017-06-18 16:56:13

标签: c

typedef unsigned char byte;

unsigned int nines = 999;
byte * ptr = (byte *) &nines;


printf ("%x\n",nines);
printf ("%x\n",nines * 0x10);
printf ("%d\n",ptr[0]);
printf ("%d\n",ptr[1]);
printf ("%d\n",ptr[2]);
printf ("%d\n",ptr[3]);

输出:

3e7
3e70
231
3
0
0

我知道前两个只是999和999 * 16的十六进制表示。剩下的4是什么意思? ptr [0]到ptr [3]?

2 个答案:

答案 0 :(得分:6)

最有可能的是,你在32位LE系统上运行这个系统999的十六进制是: - 00 00 03 E7 - 它存储在内存中的方式是
E7 03 00 00因此: -

ptr[0]指向包含E7的字节,小数为231 ptr[1]指向包含03的字节,其小数为3 ptr[2]指向包含00的字节,小数为0 ptr[3]指向包含00的字节,其小数为0

HTH!

答案 1 :(得分:0)

我认为如果你写的话,你会清楚地看到:

typedef unsigned char byte;

main() {
unsigned int nines = 999;
byte * ptr = (byte *) &nines;

printf ("%x\n",nines);
printf ("%x\n",nines * 0x10);
printf ("%x\n",ptr[0]);
printf ("%x\n",ptr[1]);
printf ("%x\n",ptr[2]);
printf ("%x\n",ptr[3]);
printf ("%d\n",sizeof(unsigned int));
}

char是8位,一个字节,int是4个字节(在我的64字节机器中)。 在您的机器中,数据保存为little-endian,因此首先找不到有意义的字节。