C/C++の非常に素朴な疑問です。

a[ i ] の i の型は何か?

です。
古き良きK&R時代であればintでしょうが、いつからか、sizeof演算子の戻り値もsize_tなので
size_tではないのか?という疑問がわきます。

とはいえ、(ちょっと強引なコードですが)

const char *a = "abcdefg";
a++;
printf("%c", a[-1]);

もありなので、-1を指定できるということはint?

C++コンテナのoperator [](...)は添字の型が定義されているから
それ(たいてい size_type)に従えばよいのですが、

単純な配列型(char []など)の添字の型はなんでしょうか?