int i, *p;

とした時に、

p = &i;

ってする必要性に迫られることはまず無い。

ましてや、

p++;

なんてすること100%ない。
悪いけど、上の書き方で理解しようとしないで欲しい。

int ary_a[] = {0, 1, 2, 3, 4, 5, 6, 7};
int ary_b[] = {100, 101, 102, 103, 104, 105, 106, 107};
int *p;
int **pp = {ary_a, ary_b};

// OKな場合
p = ary_a;
pp = &p;
p++; // pの型が(int *)型なので、(int)幅でアドレスがインクリメントされる
pp++; // ppの型が(int **)型なので、(int *)幅でアドレスがインクリメントされる

// NGな場合
面倒くさくなったのでNGな場合は書きません。

ってことです。