int (p)[n] = malloc(sizeof p); (*p)[i] = 1; // run-time bounds check
https://godbolt.org/z/vb8dqx1od
But yes, having a type that included the bound makes sense. But I do not think using array syntax for pointers as in your proposal makes any sense.
Dennis Ritchie got it right: https://www.bell-labs.com/usr/dmr/www/vararray.pdf
Ritchie DM. Variable-size arrays in C. The Journal of C Language Translation 1990;2:81-86.