Let's look at it in a different way. Arrays work on static allocation in C/C++. So we must make sure that the compiler is able to figure out the size of the array at compile time itself, which is mandatory condition with arrays because of so many goddamn reasons. So whenever the compiler encounters the '[]' notation, it expects that the memory size (that needs to be allocated at runtime) can be figured out from code itself.
When we define an array in C/C++, the memory for the array gets allocated (When I say array, I mean the cells where array elements are going to be stored). Now when you say like
int a[] = {3,4,5,6};
It is going to allocate some memory, say 16 Bytes for 4 elements, which can be figured out by the compiler at the compile time.
Now when you say
int a2[] = a;
The compiler sees the array notation '[]', but is not able to identify how much memory needs to be allocated for the array cells, which gives you an error.
When we talk about an array, it is always about the dereferenced cell pointed by a constant pointer, while when we talk about a pointer, it can exist without referencing anything, which is knows as dangling pointer. Hope it helps.