Hi I’ have come across to a code that I have hard time to understand why it is working and I would appreciate if someone could explain me
Here is the code This is actually a very simplified version of the real code which can be found here http://acts.nersc.gov/hypre/example10/ex10.cxx.html
#include <iostream>
int main(int argc, char *argv[]){
double ***elemStiff = new double**[10];
int i, k;
for (i = 0; i < 10; i++){
elemStiff[i] = new double*[4];
for (k = 0; k < 4; k++){
elemStiff[i][k] = new double[4];
}
double **A = elemStiff[i];
for (k = 0; k < 4; k++)
A[k][k] = 2/3.;
A[0][1] = A[1][0] = -1/6.;
A[0][2] = A[2][0] = -1/3.;
A[0][3] = A[3][0] = -1/6.;
A[1][2] = A[2][1] = -1/6.;
A[1][3] = A[3][1] = -1/3.;
A[2][3] = A[3][2] = -1/6.;
}
std::cout << elemStiff[1][0][0] << std::endl;
}
In short, here we initialize and fill the values of the elemStiff array which has 10 rows and each row is a 4×4 matrix.
What is very weird to me is that the code fills in the entries of elemStiff array with the help of the double **A = elemStiff[i];
When I first saw I though it would give an error but it works!. The values passed on A, they are passed at the same time on elemStiff array, but I dont understand why it works
Thank you
Let’s start with simpler version:
In this example we create a pointer
ptrthat points to the first element ofarray. Then when we are writing into the memory thatptrpoints to, we are actually writing into thatarray. So then when we check values ofarrayelements, we can see they were properly initialized.Your code is pretty much the same, there’s just an array of 10 two-dimensional arrays:
And then just like we used
ptrin my simple example, you use a temporary pointerAto make it point to each of those 10 two-dimensional arrays: