While the name of an array does decay into a pointer in some contexts (for example myArray[5] is really just another way of saying *(myArray + 5)), arrays and pointers are not the same thing in the C language.
One difference is that the contents of arrays can be initialized with curly braces { } in the same line they are declared. This is not true with pointers.
int a[] = {1,2,3}; // this is okay
int* p = {7,8,9}; // this isn't
Another difference is that pointer variables can be modified, while the address pointed to by an array name is fixed.
char* p = "hello";
char a[] = "hello";
a = a + 2; // this is fine
a++; // this is fine too
b = b + 2; // these will cause the compiler to complain
b++;
Despite these differences, it is perfectly legal to assign an array's address to a pointer variable--in fact, this is what you are doing when you pass arrays to functions.
int a[] = {234,0,-23,34,3};
int* p = a; // this is okay
The following line is legal because you are defining an array of character pointers. The array c[] can be initialized with curly braces { }. But it is still fine to declare character arrays with pointers if you use quotes " ".
char *c[] = {"hello","world"};
This next line isn't allowed because you declared a pointer variable and are also trying to define its contents with { } as it it were an array.
int *v[] = {{1,2},{3,4}};
You should use this instead:
int v[][2] = {{1,2},{3,4}};