配列に直接割り当てたり、C で配列型にキャストしたりすることはできません。ただし、配列はポインターに減衰するため、データをvoid *ポインター (つまり: memcpy) から配列にコピーして、配列として使用することができます。
#include <stdio.h>
#include <string.h>
int main() {
int a1=1, a2=2, a3=3, a4=4;
int *a[2][2] = { { &a1, &a2 }, { &a3, &a4 } };
printf("%d %d %d %d\n", *a[0][0], *a[0][1], *a[1][0], *a[1][1]);
void *b;
b = (void*) a;
int *c[2][2];
memcpy(c, b, sizeof(c));
printf("%d %d %d %d\n", *c[0][0], *c[0][1], *c[1][0], *c[1][1]);
return 0;
}
次のプログラムをコンパイルして実行すると、次のようになります。
1 2 3 4
1 2 3 4
ただし、cとaは現在 2 つの異なる配列です。