The second is wrong. You have to think the types:
Code:
int* p;   // int*
int** p; //int**
int a[];   //int[]
int a[][]; //int [][]
You can convert one dimension. Thus, a [] to a *. So this is valid:
Code:
int* = int[]
int** = int (*)[]
int**** = int (*)[][][]
But not more than one. This in invalid:
Code:
int** = int[][]
And this are different:
Code:
int *p[10];    // an array of int*. Thus 10 pointers to int
int (*p)[10]; // one int[]. Thus one pointer to a 1D array with 10 elements
hope this helps