void foo(char[] a) {} void bar(char[][] b) {} int main(string[] args) { char[4] a; char[4][4] b; foo(a); // OK: implicit convertion bar(b); // Error: cannot implicitly convert // char[4u][4u] to char[][] } what is the reason for the different behaviour? What's best to pass such multidimensional arrays?