#include <stdio.h>

int main(void)
{
    int a[][3] = {{10, 20, 30},
                  {40, 50, 60},
                  {70, 80, 90}};
    int *p[] = {a[0], a[1], a[2]};
    int (*q)[3] = a;

    printf("sizeof(int) = %zu\n", sizeof(int));
    printf("sizeof p[0] = %zu\n", sizeof p[0]);
    printf("sizeof q[0] = %zu\n", sizeof q[0]);
    printf("&a = %p\n", (void *)&a);
    printf("&p = %p\n", (void *)&p);
    printf("&q = %p\n", (void *)&q);

    printf("sizeof a = %zu\n", sizeof a);
    printf("sizeof p = %zu\n", sizeof p);
    printf("sizeof q = %zu\n", sizeof q);

    printf("**a = %d\n", **a);
    printf("a[1][1] = %d\n", a[1][1]);
    printf("*a[1] = %d\n", *a[1]);
    printf("(*a + 1)[1] = %d\n", (*a + 1)[1]);
    printf("*(a + 1)[1] = %d\n", *(a + 1)[1]);

    printf("**p = %d\n", **p);
    printf("p[1][1] = %d\n", p[1][1]);
    printf("*p[1] = %d\n", *p[1]);
    printf("(*p + 1)[1] = %d\n", (*p + 1)[1]);
    printf("*(p + 1)[1] = %d\n", *(p + 1)[1]);

    printf("**q = %d\n", **q);
    printf("q[1][1] = %d\n", q[1][1]);
    printf("*q[1] = %d\n", *q[1]);
    printf("(*q + 1)[1] = %d\n", (*q + 1)[1]);
    printf("*(q + 1)[1] = %d\n", *(q + 1)[1]);

    return 0;
}