У вас есть две программы с разными кадрами стека, поэтому неудивительно, что адреса локальных переменных различны. Il может меняться каждый раз, когда вы запускаете программу (это то, что она делает, когда я ее пробую, код, скомпилированный с gcc в Linux).
Но вы получите те же значения с программой ниже единицы, за исключением последнего значения серии (кроме последнего, из-за того, как работает арифметика указателей).
#include<stdio.h>
void main()
{
int a[5]={1,2,3,4,5};
int *p;
p=&a;
printf("%u %u %u %u ",a,a+1,p,p+1);
printf("%u %u %u %u",a,a+1,&a,&a+1);
}
Полное объяснение различий между указателями и массивами вы можете найти в моем ответе здесь