>>134
>>136
aと配列名を単独で書くとa[0]へのポインタ
&aは配列全体へのポインタでアドレスはaと同じ
(void*)はポインタの型が合わないと文句を言わせないようにするためのキャスト

int a[10] = {}; # 混乱しないように配列サイズを4から10にした

a + 10 == (void *)(&a + 1)
aはa[0]へのポインタになるので+1でint分のアドレスがずれる
&aは配列全体へのポインタになるので+1でint 10個分のアドレスがずれる
当然のことながらa + 10や&a + 1は配列から外れたアドレスになるが値を代入しなければ問題はない