Possible Duplicate:
Casting int pointer to char pointer causes loss of data in C?
What is the reason for the output being 64
in the following code?
void main()
{
int i=320;
char *ptr=(char *)&i;
printf("%d",*ptr);
}
Possible Duplicate:
Casting int pointer to char pointer causes loss of data in C?
What is the reason for the output being 64
in the following code?
void main()
{
int i=320;
char *ptr=(char *)&i;
printf("%d",*ptr);
}
实施定义;取决于您平台上的字节序和 sizeof(int)。您基本上将您的 int 截断为自身的第一个字节,这显然是您系统上的最低有效位。
320 = 0x00 00 01 40 并截断为始终为一个字节的 char:0x40 = 64
这就是为什么。
编辑:正如 Daniel Fischer 指出的那样,这也取决于CHAR_BIT
<= 8 (它在大多数系统中,如果不是全部的话)。
这是一个char
指针。所以它指向一个字节。320 不适合一个字节。
320 是 0x0140
64 是 0x0040
您只读取 int 值的低字节。
关联的内存i
指向一个整数(即大于一个字节)值 320 或0x0140
.
然后,您获取一个指向该整数的指针并将其转换为指向 a char
(单个字节)的指针。
然后你打印这个地址的值,在这种情况下0x40
,即 LSB。这是您的值 64。
在其他实现中,您将获得 MSB,其0x01
值为 1。