C, Арифметика с адресами памяти

Вот код:

#include<stdio.h>

int main() {
    int n;
    printf("pointer address: %p\n", &n);
    printf("pointer address + 1: %p\n", (&n+0x1));
    return 0;
}

Вот результат:

pointer address: 0061FF1C
pointer address + 1: 0061FF20

Почему при добавлении 1, получается значение, которое должно получится при добавлении 4?
С чем это связано?

Windows 10
GCC 6.3.0


Ответы (2 шт):

Автор решения: Harry

В соответствии с типом указателя.

Чтобы *(p+i) было эквивалентно p[i], в арифметике указателей смещение при сложении происходит на размер типа. В вашем случае - на размер int.

→ Ссылка
Автор решения: Алексей Калмыков

вы добавляете целочисленное значение, int - может быть как 16 так и 32 и 64 разрядным в зависимости от его модификаторов длины. В стандартном варианте он 32 разрядный , то есть 32бита / 8 = 4 байта

→ Ссылка