Я ищу объяснение того, как увеличение адреса влияет на указатель.
Я узнал о том, как работают указатели C и как делается увеличение указателя, учитывая тип указателя. до сих пор не понимаю следующий случай
int main()
{
int a[] = {1,2,3,4,5};
int *p = (int*)(&a+1);
printf("%d\n%d\n", *(a+1), *(p-1));
return 0;
}
я ожидал эту строку
int *p = (int*)(&a+1);
чтобы p указывал на адрес, следующий за массивом "a", поэтому я ожидал вывода:
2 - , поскольку это просто [1]
unknown_number - , поскольку я не знаю, какое значение int отстает на 4 байта (& a + 1)
но фактический результат:
1021 * * 2
5
почему кажется, что p указывает непосредственно на память, сидящую после a?
каков источник моего замешательства?