Recent (e.g. C2011, and perhaps C99) C standards enable variable length array so the following function does work
int
sum (int n, int t[n][n])
{
int s = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
s += t[i][j];
return s;
}
this is compiled without warnings with gcc-4.7 -std=gnu99 -Wall -O -c ex.c and the generated assembler is what you expect
As to why int t[][] cannot work, it is because each element of the entire t would be of type int [] which has indeterminate size.