>>56
簡潔にいえば、int a[10]と宣言して値を取得するときのa[0],a[1]…a[n]は、「配列のn個目の要素を取り出せ」という意味ではなく、
「アドレスaに4nを加えたアドレスにアクセスせよ」という意味だから(sizeof(int) = 4のとき)
例えばint a[10]に対してaを1000番地とすると、配列のために確保された領域は1000番地〜1039番地
このときa[10]=1040番地はaのために確保された領域ではないが、存在はするのでアクセスできる
当然この1040番地には何のデータが入ってるか分からないし、いつ書き換えられるのかもわからないので非常に危険

まあとりあえずポインタを勉強してみようぜ