Чтобы прояснить вопрос, обратите внимание на фрагмент кода c/С++:
int a = 10, b = 20, c = 30, d = 40; //consecutive 4 int data values.
int* p = &d; //address of variable d.
Теперь, в visual studio (тестируется в 2013 году), если значение p == hex_value (которое можно просмотреть в окне памяти отладчика), то вы можете заметить, что адреса для других переменных a, b, c, и d каждый с разностью в 12 байт!
Итак, если p == hex_value
, то следует:
&c == hex_value + 0xC
(примечание hex C равно 12 в десятичной форме)
&b == &c + 0xC
&a == &b + 0xC
Итак, почему есть смещение в 12 байт вместо 4 байтов - int всего 4 байта?
Теперь, если мы объявили массив:
int array[] = {10,20,30,40};
Значения 10, 20, 30, 40 каждый расположены с разностью в 4 байта, как ожидалось!
Может кто-нибудь объяснить это поведение?