Passing two-dimensional array via pointer
arrays, c, pointers
Solution
If you insist on the above declaration of `foo`, i.e.
void foo(float **pm)
and on using a built-in 2D array, i.e.
float m[4][4];
then the only way to make your `foo` work with `m` is to create an extra "row index" array and pass it instead of `m`
...
float *m_rows[4] = { m[0], m[1], m[2], m[3] };
foo(m_rows);
There no way to pass `m` to `foo` directly. It is impossible. The parameter type `float **` is hopelessly incompatible with the argument type `float [4][4]`.
Also, since C99 the above can be expressed in a more compact fashion as
foo((float *[]) { m[0], m[1], m[2], m[3] });
P.S. If you look carefully, you'll that this is basically the same thing as what Carl Norum suggested in his answer. Except that Carl is `malloc`-ing the array memory, which is not absolutely necessary.
Problem
How do I pass the m matrix to foo()? if I am not allowed to change the code or the prototype of foo()? ``` void foo(float **pm) { int i,j; for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) printf("%f\n", pm[i][j]); } int main () { float m[4][4]; int i,j; for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) m[i][j] = i+j; foo(???m???); } ```