Это
int num=1;
, представленное в 32 bit
системе, как показано ниже
0x103 0x102 0x101 0x100 (let's assume base address of num 0x100)
-----------------------------------------------
| 0000 0000 | 0000 0000 | 0000 0000 | 0000 0001 |
-----------------------------------------------
num
MSB <--LSB
А здесь
char *b; /* char pointer i.e at a time points to 1 byte */
b=(char*)# /* b points to &num i.e 0x100 in above diagram */
выглядит как
0x103 0x102 0x101 0x100
-----------------------------------------------
| 0000 0000 | 0000 0000 | 0000 0000 | 0000 0001 |
-----------------------------------------------
num
b <-- b points here
Теперь, когда выполняется
*(++b)=2;
, сначала происходит ++b
, что означает, что указатель на символ b
увеличивается на один байт, т. Е. Он указывает на местоположение 0x101
, а затем содержимое только * 1020.* местоположение, назначенное 2
.Это выглядит как
0x103 0x102 0x101 0x100
-----------------------------------------------
| 0000 0000 | 0000 0000 | 0000 0010 | 0000 0001 |
-----------------------------------------------
| num
b <-- b points to 0x101
Теперь, когда вы печатаете num
, он печатает 512 + 1
, что составляет 513
.Надеюсь, это очистит ваши сомнения.