将int转换为char指针:意外值?

时间:2012-07-04 18:13:58

标签: c pointers

  

可能重复:
  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);
}

4 个答案:

答案 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.