配列のポインタを返す関数

C言語でtypedefを使わずに、配列のポインタを返す関数の宣言の方法がようやくわかった。
今まで、誰に聞いても答えを得られなかったものだ。
typedefを使った方がわかりやすくて良いのかもしれないが、
長年の疑問が解決したのでスッキリした。

float m[4][4] = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
float (*getmp())[4][4]  {   return &m; }
float (*getm())[4]      {   return m;  }

int main(int argc, char* argv[])
{
    float (*a)[4][4];
    a = getmp();
    printf("(*a)[1][0] = %g\n", (*a)[1][0]); // (*a)[1][0] = 5
    float (*b)[4];
    b = getm();
    printf("b[1][1] = %g\n", b[1][1]); // b[1][1] = 6
    return 0;
}