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 байта