Converting multidimensional arrays to pointers in c++

c++, multidimensional-array, pointers

Solution

No, there's no right way to do specifically that. A `double[4][4]` array is not convertible to a `double **` pointer. These are two alternative, incompatible ways to implement a 2D array. Something needs to be changed: either the function's interface, or the structure of the array passed as an argument.

The simplest way to do the latter, i.e. to make your existing `double[4][4]` array compatible with the function, is to create temporary "index" arrays of type `double *[4]` pointing to the beginnings of each row in each matrix

double *startRows[4] = { startMatrix[0], startMatrix[1], startMatrix[2] , startMatrix[3] };
double *inverseRows[4] = { /* same thing here */ };

and pass these "index" arrays instead

MatrixInversion(startRows, 4, inverseRows);

Once the function finished working, you can forget about the `startRows` and `inverseRows` arrays, since the result will be placed into your original `inverseMatrix` array correctly.

Problem

I have a program that looks like the following: ``` double[4][4] startMatrix; double[4][4] inverseMatrix; initialize(startMatrix) //this puts the information I want in startMatrix ``` I now want to calculate the inverse of startMatrix and put it into inverseMatrix. I have a library function for this purpose whose prototype is the following: ``` void MatrixInversion(double** A, int order, double** B) ``` that takes the inverse of A and puts it in B. The problem is that I need to know how to convert the double[4][4] into a double** to give to the function. I've tried just doing it the "obvious way": ``` MatrixInversion((double**)startMatrix, 4, (double**)inverseMatrix)) ``` but that doesn't seem to work. Is that actually the right way to do it?

Original source

Related problems