1

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);
}
4

4 回答 4

2

实施定义;取决于您平台上的字节序和 sizeof(int)。您基本上将您的 int 截断为自身的第一个字节,这显然是您系统上的最低有效位。

320 = 0x00 00 01 40 并截断为始终为一个字节的 char:0x40 = 64

这就是为什么。

编辑:正如 Daniel Fischer 指出的那样,这也取决于CHAR_BIT<= 8 (它在大多数系统中,如果不是全部的话)。

于 2012-07-04T18:16:53.347 回答
0

这是一个char指针。所以它指向一个字节。320 不适合一个字节。

于 2012-07-04T18:17:05.660 回答
0

320 是 0x0140

64 是 0x0040

您只读取 int 值的低字节。

于 2012-07-04T18:18:15.133 回答
0

关联的内存i指向一个整数(即大于一个字节)值 320 或0x0140.

然后,您获取一个指向该整数的指针并将其转换为指向 a char(单个字节)的指针。

然后你打印这个地址的值,在这种情况下0x40,即 LSB。这是您的值 64。

在其他实现中,您将获得 MSB,其0x01值为 1。

于 2012-07-04T18:19:27.287 回答