#include <stdio.h>
#include <string.h>

int main(void)
{
    int array[][3] = { {1,2,3}, {4,5,6}, {7,8,9} };
    int *p_array = (int*) array;

    for (int i = 0; i < 9; i++) {
        printf("%-10s %08p: %016p\n", i == 0 ? "array" : "", &p_array[i], p_array[i]);
    }

    printf("%-10s %08p: %016p\n", "p_array", &p_array, p_array);
    
    int array1[] = { 11, 12 };
    int array2[] = { 13, 14, 15, 16 };
    int array3[] = { 17, 18, 19 };

    int *array_pointers[] = { array1, array2, array3 };
    int *array_pointers2 = (int*) array_pointers;

    putchar('\n');

    for (int i = 0; i < sizeof(array1) / sizeof(array1[0]); i++) {
        printf("%-10s %08p: %016p\n", i == 0 ? "array1" : "", &array1[i], array1[i]);
    }

    for (int i = 0; i < sizeof(array2) / sizeof(array2[0]); i++) {
        printf("%-10s %08p: %016p\n", i == 0 ? "array2" : "", &array2[i], array2[i]);
    }

    for (int i = 0; i < sizeof(array3) / sizeof(array3[0]); i++) {
        printf("%-10s %08p: %016p\n", i == 0 ? "array3" : "", &array3[i], array3[i]);
    }

    for (int i = 0; i < sizeof(array_pointers) / sizeof(array_pointers[0]); i++) {
        printf("%-10s %08p: %016p\n", i == 0 ? "array_poin" : "", &array_pointers[i], array_pointers[i]);
    }

    printf("%-10s %08p: %016p\n", "array_poi2", &array_pointers2, array_pointers2);

    return 0;
}
