配列でのポインタ用法について勉強しているんですが
float balance[10][5] という配列の balance[3][1] にポインタでアクセスしたい場合

float *p;
p=(float*)balance;
printf("%d",*(p+(3*5)+1));

のように書きますが、何故p+(3*5)+1なのかいまいち理解できません。
*pがbalance[0][0]として、順番に並べると、
[0][0],[0][1],[0][2],[0][3],[0][4],[0][5],[1][0],[1][1],[1][2],[1][3],
[1][4],[1][5],[2][0],[2][1],[2][2],[2][3],[2][4],[2][5],[3][0],[3][1]
と、p+(3*6)+1 だと思うのですが・・
配列の際[〜][5]の5のような最後の場所は、
float balance[10][5]と宣言してもメモリ上にも作られないのでしょうか?

初歩的 かつ 分かりにくい質問ですいません。
どなたか教えて頂けると助かります、宜しくお願いします