uint16_t data[] = {0,1,2,3,4,5,6,7};
int skip = 4;
auto p = reinterpret_cast<uint16_t (*)[skip]>(data);
printf("%d %d %d\n", p[0][0], p[0][1], p[0][2]); // => 0 1 2
printf("%d %d %d\n", p[1][0], p[1][1], p[1][2]); // => 4 5 6

こうやって変数で配列のサイズを指定するのって、
c++11 でも規格ではなく GCC独自拡張でしょうか?