包含指针的C程序输出

包含指针的C程序输出,c,pointers,output,C,Pointers,Output,我想输出是300,但答案是556。有人能解释一下吗。二进制的整数值300是:00000001 00101100。 它存储在内存中为:00101100000001 表达式*++ptr=2的结果使内存表示为:000000 10 00101100 因此,对应于它的整数是00000010 00101100=>556如果它是小端,它看起来像 int main() { int a = 300; char *b = (char *)&a; *++b = 2; printf

我想输出是300,但答案是556。有人能解释一下吗。

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

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


因此,对应于它的整数是
00000010 00101100=>556

如果它是小端,它看起来像

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

“输出是300,但答案是556”是什么意思?如果运行程序,输出是什么?“答案”从何而来?你先解释一下为什么你认为这两个值是对的还是错的?你的好解释看起来像是在中间解释中转换了Endianness。我期望的是
00000010 00101100
而不是
00101100000010
a = 0000 0000 | 0000 0000 | 0000 0000 | 0000 0001 | 0010 1100
    |                                                       |
    MSB                                                     b<--points base address
                                                            LSB
a = 0000 0000 | 0000 0000 | 0000 0000 | 0000 0010 | 0010 1100 => 512 + 44 = 556 
                                                  |         |
                                                  b         LSB