How would I declare a pointer which points to 2D array of character pointers. Like

```
char *ar[10][10]; 

```

In my understanding this array is stored as array of array, so `ar` points to a array of pointers, each of which points to a column in this array. So it has three level of pointers. So it should be declared as 

```
char ***p; 

```

Thus both `ar` and `p` are of the same type. 
But if I use `p` like a 2d array for e.g. `p[0][0]`, it gives a segmentation fault. Why does this happen and what would be the correct way to declare `p`?