Cast to pointer to multidimensional array

  • Thread starter Szabolcs Borsanyi
  • Start date
S

Szabolcs Borsanyi

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[j] and C[j] or D[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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,776
Messages
2,569,603
Members
45,189
Latest member
CryptoTaxSoftware

Latest Threads

Top