Ну а что именно интересует? Указатель это просто адрес области памяти где лежат твои данные. В C/C++ есть арифметические операции над указателями, но с ними лучше быть аккуртней. Через них можно получить указатель на область памяти которая твоему приложению не принадлежит и при попытки что-нибудь с этой памятью сделать ты олучишь сегфолт.
А так всё просто например обрати внимание на "случайное" совпадение в выводе следующей программы:
#include <stdio.h>
int main(int argc, char **argv)
{
int a[5];
long long b[5];
int *ptr_i = a;
long long *ptr_ll = b;
size_t dist_i = (size_t)(ptr_i+1) - (size_t)ptr_i;
size_t dist_ll = (size_t)(ptr_ll+1) - (size_t)ptr_ll;
printf("dist_i = '%d'; sizeof(int) = '%d'\n", dist_i , sizeof(int));
printf("dist_ll = '%d'; sizeof(long long) = '%d'\n", dist_ll, sizeof(long long));
return 0;
}
@Kwah а зачем обоих сдвигать? Это же пустая трата времени на ненужную дополнительную арифметическую операцию в теле цикла.