The problem is that an array declared as:
<strong>int</strong> a[ 42 ][ 17 ];
is not the same as <strong>int</strong> *a[ 42 ];
The first is a 2D array of 714 (42 x 17)ints.
The second is a 1D array of 42 pointers to int.
The c_function() is looking for something like the second, but you are trying to give it something like the first.
[edit] It is a vagary of the C language that lets you treat pointers like arrays, so however you define it, you can reference a specific int as:
a[ 10 ][ 4 ]
For the first type, it is just a simple multiplication and one dereference to index the element: *(a + (10 * 42) + 4)
For the second type, it is two dereferences: *(*(a + 10) + 4)
Hope this helps.