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?
No, there’s no right way to do specifically that. A
double[4][4]array is not convertible to adouble **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 typedouble *[4]pointing to the beginnings of each row in each matrixand pass these “index” arrays instead
Once the function finished working, you can forget about the
startRowsandinverseRowsarrays, since the result will be placed into your originalinverseMatrixarray correctly.