int a[N], *p;

p = (int*)((int)a - 1);

これって未定義?