Cast to pointer to multidimensional array

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Szabolcs Borsanyi

    Cast to pointer to multidimensional array

    Dear All,

    there have been several threads on multidimensiona l 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 multidimensiona l 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
Working...