ushort divHists[200][8 * 4] = { { 0 } };
ushort* p1 = (ushort*)divHists;
ushort* p2 = (ushort*)&divHists;
ushort* p3 = (ushort*)&divHists[0];
ushort* p4 = (ushort*)&divHists[0][0];
理解できないのです。
特に、divHists と &divHists が同じ値であるのは不可解です。
解釈できる方お願いします。
int a[3][4]; という宣言があったとすれば、それは、
3行4列の行列です。
&a : 行列全体へのポインタ
+---------+---------+---------+---------+
| a[0][0] | a[0][1] | a[0][2] | a[0][3] |
+---------+---------+---------+---------+
| a[1][0] | a[1][1] | a[1][2] | a[1][3] |
+---------+---------+---------+---------+
| a[2][0] | a[2][1] | a[2][2] | a[2][3] |
+---------+---------+---------+---------+
&a[0] : 0行目へのポインタ (a は &a[0] と同じ)
+---------+---------+---------+---------+
| a[0][0] | a[0][1] | a[0][2] | a[0][3] |
+---------+---------+---------+---------+
&a[0][0] : 0行0列目へのポインタ
+---------+
| a[0][0] |
+---------+
ポインタの型は異なるが、ポインタの値(アドレス) は同じ。
&a[1] と &a[1][0] も、ポインタの値(アドレス)は同じ。
&a[2] と &a[2][0] も、ポインタの値(アドレス)は同じ。