什么是p指向int x = 259; char * p =(char *)& x;?

时间:2018-02-01 17:54:57

标签: c pointers

我遇到了一个代码,我无法理解:

     3 1 0 0

输出结果为:

     X            Output
    127           127 0 0 0
    128          -128 0 0 0
  256*127         0 127 0 0
  256*128         0 -128 0 0

我尝试将x更改为许多不同的数字,结果让我更加困惑

    char *p = (char*)&x;

等......

有人可以解释在

中指向的内容
{{1}}

它打印出来的是什么。 谢谢。

3 个答案:

答案 0 :(得分:2)

 int x=259;
 char *p = (char*)&x;

x是4字节0x03 0x01 0x00 0x00,因为您所在的机器是小端(请参阅https://en.wikipedia.org/wiki/Endianness

所以

  • p指向第一个字节= 3
  • p + 1点1
  • p + 2和+ 3点在0

您可以对其他值进行相同的分析。

答案 1 :(得分:1)

取决于您的架构。

它指向int表示的第一个字节。

在小端机器上,它将是259的低位字节,即3。

在大端机器上,它将为零。

答案 2 :(得分:1)

X is an int (4 bytes) But p is a pointer to a char (1 byte). So p is pointing to the first byte of the int representation.

Thats why you are getting 3 1 0 0 because 256 is represented that way 0x03 0x01 0x00 0x00 on a little endian machine.

In the other cases you are getting the minus (e.g -128) because the first bit of the byte is 1. And it thinks that it' a negative number.

(the binary representation of 128 on a little endian machine is : 10000000 00000000 00000000 00000000)