C程序输出涉及指针

时间:2018-04-21 06:17:18

标签: c pointers output

 int main()
 {
  int a = 300;    
  char *b = (char *)&a;
  *++b = 2;
   printf("%d ",a);
    return 0;
  }

我认为输出是300,但答案是556.有人请解释一下。

2 个答案:

答案 0 :(得分:1)

如果是小结局,它看起来像是

a = 0000 0000 | 0000 0000 | 0000 0000 | 0000 0001 | 0010 1100
    |                                                       |
    MSB                                                     b<--points base address
                                                            LSB

接下来当您*++b = 2; b现在更改时,它会指向 第二个字节(bcz char ptr递增1个字节),你放2(第一个字节数据不变)

a = 0000 0000 | 0000 0000 | 0000 0000 | 0000 0010 | 0010 1100 => 512 + 44 = 556 
                                                  |         |
                                                  b         LSB

答案 1 :(得分:0)

二进制的整数值300是:00000001 00101100。 它以:00101100 00000001存储在内存中。

表达式*++ptr = 2的结果使内存表示为:00000010 00101100

所以对应的整数是00000010 00101100 => 556