int *p[10]
declares p as an array of 10 pointers to intint **p = new int*[10]
allocates memory, constructs an array of 10 pointers to int in that memory, declares p as a pointer to pointer to int, and initializes it to point to the first of the 10 pointers to int that were allocated.int p[10]
declares p as an array of 10 intint *arr[10]
declares arr as an array of 10 pointers to intint (*arr)[10]
declares arr as a pointer to an array of 10 intint *(arr[10])
declares arr as an array of 10 pointers to int (same as int *arr[10])