int main()
{
int a = 300;
char *b = (char *)&a;
*++b = 2;
printf("%d ",a);
return 0;
}
我认为输出是300,但答案是556.有人请解释一下。
答案 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
。