It seems that it isn't accepted ( I am not completely sure - I will look better ).
The semantics of the language are that for a unidimensional array the name of the array is a pointer to the type of element of the array and exactly a pointer to the first element.
In your case the array is just a pointer of type (int*).
On any (int*) we may apply the [] brackets.
These brackets as I have checked just translate to add the number inside the square brackets to the pointer ( using the pointer arithmetics ) and applying a dereference to the pointer.
Explained in other words:
int *p;
p[nn] is equivalent to *(p+nn);
So in that vision having the code bellow:
int a[8],b[8];
a=b;
doing a=b could only copy the content of pointer b to the pointer a.
But because the array is a constant pointer with no possibility to change that isn't possible.
So the code above would report an error;
Any way if it was possible it would copy the address where the array b starts to the pointer a.
And that any way isn't what you need or what you expect.
That is the way that C treats arrays ( thanks for having obliged me to think on it ).
In the case the size was fixed I would do like that:
typedef struct{int arr[0x4];}S;
S a,b;
a=b;
In order to access the array you should use: a.arr[] and b.arr[]
In case you need an array of arrays it would be simple to extend to your case.
The problem is that in your case the size is dynamic.
The only simple solution is to use:
memcpy(a,b,sizeof(a));
That has the effect of copying b into a as you need. Every other solution is more complicated.