Код недействителен. Вы не можете инициализировать массив указателем. Кажется, есть опечатка, и функция должна выглядеть так:
void foo(void *pointer) {
uint8_t ( *matrix )[5][5][5][5] = (uint8_t(*)[5][5][5][5])pointer;
// some other code
}
То есть указатель типа void *
интерпретируется как указатель на массив типа uint8_t[5][5][5][5]
.
На самом деле в C вы можете просто написать
void foo(void *pointer) {
uint8_t ( *matrix )[5][5][5][5] = pointer;
// some other code
}
Вот демонстрационная программа (которая ничего не делает полезной), которая показывает использование такой конструкции.
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#define N 5
void foo( void *pointer )
{
uint8_t ( *matrix )[N][N][N][N] = pointer;
for ( size_t i = 0; i < N; i++ )
{
for ( size_t j = 0; j < N; j++ )
{
for ( size_t k = 0; k < N; k++ )
{
for ( size_t l = 0; l < N; l++ )
{
( *matrix )[i][j][k][l] = N * ( i + j + k ) + l;
}
}
}
}
}
int main(void)
{
uint8_t a[N][N][N][N];
foo( &a );
return 0;
}