By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
448,506 Members | 1,228 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 448,506 IT Pros & Developers. It's quick & easy.

Cast to pointer to multidimensional array

P: n/a
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
Jun 27 '08 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.