Почему адрес в памяти увеличивается на 4 а не на 1?

Сижу, никого никого не трогаю, пишу хелловорлды. Экспериментирую с указателем на память. - "А что если глянуть что там дальше! - и начал указатель этот увеличивать.

   #include <stdio.h>
#include <stdlib.h>

int main()  {
    int *ptr = malloc(sizeof(int));
    int *new_ptr = ptr;
    if (ptr != NULL)    {
        int i;
        for (i=0; i<100000; i++)    {
            if (*new_ptr != 0)          {               
                printf("%p: %X \n", new_ptr, *new_ptr);
            }
            new_ptr=new_ptr+1;
        }
    free(ptr);
    }
}

И вот что странное: несмотря на то, что указатель увеличиваю на 1, адрес увеличивается на 4. Почему не может быть так, что после, скажем, 0x5568ff6382c0 было бы 0x5568ff6382c1. Я конечно что-то тут не понимаю, объясните пожалуйста.

введите сюда описание изображения


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

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

Потому что типизированный указатель — в вашем случае на int — увеличивается на соответствующий размер, чтобы перейти к следующему элементу в памяти.

Так резко все упрощается. Например,

int arr[5];
int *p = &arr[0];

Что такое при этом *(p+1)? Элемент arr[1]. А если бы p увеличивался на 1 байт, вы бы попали куда-то между элементами. Неудобно :)

→ Ссылка
Автор решения: dahoonpao
int *new_ptr = ptr;
  • Интовый указатель, а как известно тип int занимает 4 байта, поэтому и смещение в адресе происходит на 4 байта.
→ Ссылка