可能重复:
Casting int pointer to char pointer causes loss of data in C?
以下代码中输出为64
的原因是什么?
void main()
{
int i=320;
char *ptr=(char *)&i;
printf("%d",*ptr);
}
答案 0 :(得分:2)
实施定义;取决于您平台上的endianness和sizeof(int)。您基本上将int截断为自身的第一个字节,这显然是系统中最不重要的位。
320 = 0x00 00 01 40 并通过截断到始终为一个字节的char: 0x40 = 64
这就是原因。
编辑:正如Daniel Fischer指出的那样,这也取决于CHAR_BIT
是< = 8(现在大多数系统,如果不是全部的话)。
答案 1 :(得分:0)
这是一个char
指针。所以它指向一个字节。 320不适合一个字节。
答案 2 :(得分:0)
320是0x0140
64是0x0040
您只是读取int值的低位字节。
答案 3 :(得分:0)
与i
关联的内存指向整数(即大于一个字节)的值320或0x0140
。
然后,您将指向此整数并将其转换为指向char
(单个字节)的指针。
然后在此地址打印值,在本例中为0x40
,即LSB。这是你的值64。
在其他实现中,您将获得MSB,其为0x01
或值为1.