A pointer to 2d array

user1047092 picture user1047092 · Dec 23, 2011 · Viewed 59.3k times · Source

I have a question about a pointer to 2d array. If an array is something like

int a[2][3];

then, is this a pointer to array a?

int (*p)[3] = a;

If this is correct, I am wondering what does [3] mean from int(*p)[3]?

Answer

cpx picture cpx · Dec 23, 2011
int a[2][3];

a is read as an array 2 of array 3 of int which is simply an array of arrays. When you write,

int (*p)[3] = a;

It declares p as a pointer to the first element which is an array. So, p points to the array of 3 ints which is a element of array of arrays.

Consider this example:

        int a[2][3]
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
\_____________/
       |
       |    
       |
       p    int (*p)[3]

Here, p is your pointer which points to the array of 3 ints which is an element of array of arrays.