C は 3年以上やっていないので激しく間違っているかもしれませんが… C99 によれば、static 変数(配列なら各要素)が自動的に 0 に初期化されるのは、明示的な初期化が無い場合だそうです(以前の規格は持っていないので分からないです)。上記の場合は明示的に初期化しているので、残りの要素 a[2..99] が 0 に初期化されるとは期待できず、その内容は不定となります(「不定」なので、期待通り a[2..99] が 0 になっていても間違いではない)。さらに const がついているので、a[] のどの要素も絶対に書き換えられることはありません。したがって、a[2 .. 99] の範囲に隣の b[] の中身が偶然見えていたとしても構わないのではないかと思います。おそらくはコンパイラが記憶領域節約のためにこういう最適化をしたのではないかと推測します。