| | | Szabolcs Borsanyi |  |
| Posted: Fri Jun 06, 2008 6:59 am Post subject: Cast to pointer to multidimensional array |  |
| |  | |
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 |
|