Почему адрес в памяти увеличивается на 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 шт):
Потому что типизированный указатель — в вашем случае на int
— увеличивается на соответствующий размер, чтобы перейти к следующему элементу в памяти.
Так резко все упрощается. Например,
int arr[5];
int *p = &arr[0];
Что такое при этом *(p+1)
? Элемент arr[1]
. А если бы p
увеличивался на 1 байт, вы бы попали куда-то между элементами. Неудобно :)
int *new_ptr = ptr;
- Интовый указатель, а как известно тип int занимает 4 байта, поэтому и смещение в адресе происходит на 4 байта.