Dear All,
there have been several threads on multidimensional arrays and pointers
to arrays, there is still something I could not fully understand.
(My point here I have raised already, but stayed unanswered)
Let's have an array.
float A[256];
And you would like to consider this as 32x8 matrix.
You can of course do A[32*i+j] for the (i,j)-th element, but it is
much more convenient to put it into an array form:
float (*B)[8]=(void*)A;
The (void*) here is merely to shut up the compiler (ie. to fulfil the language
constraints). B is a pointer to the first one of a series (float[8]) arrays.
Then, after using this layout of the data, I realise that I need an other
matrix format: 16x16, so I write.
float (*C)[16]=(void*)A;
So far there was no cast to a pointer to multidimensional array,
but you could actually want a 4x4x4 tensor and declare:
float (*D)[4][4]=(void*)A;
Is there any undefined behaviour in these casts or the subsequent access
to the members B[i][j] and C[i][j] or D[i][j][k] (i,j,k within bounds)?
Final question:
If my initial array is given by a restricted pointer to its first element,
how can I legally proceed to do these casts?
Szabolcs