#include int main() { int abc[4][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}, {12, 13, 14, 15}, }; int *base = &abc; int *current = NULL; for (int i = 0; i <= 15; i++) { /* The correct way of displaying an address would be * printf("%p ",abc[i]); but for the demonstration * purpose I am displaying the address in int so that * you can relate the output with the diagram above that * shows how many bytes an int element uses and how they * are stored in contiguous memory locations. * */ current = base + i; printf("\n abc[%d], %d ", i, *current); } long int cur = (long int)(&abc); for (int i = 0; i <= 15; i++) { /* Here we cast the address to an int. * Manipulate it and then reinterpret as a pointer. */ cur = (long int)base + i * 4; printf("\n abc[%d], %d ", i, *(int *)cur); } return 0; }