You need to understand data types.
This maybe isn't the best, but have a go at it.
Code:
#include <stdio.h>
int main()
{
int a[3][4]=
{
{1,2,3,4},
{4,3,2,1},
{7,8,0,0},
};
/* A supporting cast of characters (ooh, the puns). */
int (*x)[4] = a;
int (*y)[3][4] = &a;
unsigned long sa = sizeof a;
unsigned long sx = sizeof *x;
unsigned long sy = sizeof *y;
/* A fixed version of the original. */
printf("%p %p %p\n", (void*)a, (void*)(a + 1), (void*)(&a + 1));
/* Show that all three have or point to the same location. */
printf("%p %p %p\n", (void*)a, (void*)x, (void*)y);
/* Show how big each is. */
printf("sa = %lu (0x%X), sx = %lu (0x%X), sy = %lu (0x%X)\n",
sa, sa, sx, sx, sy, sy);
/* So incrementing the starting location by the size of an object is... */
printf("%p %p %p\n", (void*)a, (void*)(x + 1), (void*)(y + 1));
return 0;
}
/* my output
0012FF54 0012FF64 0012FF84
0012FF54 0012FF54 0012FF54
sa = 48 (0x30), sx = 16 (0x10), sy = 48 (0x30)
0012FF54 0012FF64 0012FF84
*/