int arr[3][4];: A 2D array with 3 rows and 4 columns, totaling 12 integers.
int (*p)[12];: A pointer to an array of 12 integers.
p = malloc(sizeof(int) * 24);: Allocates memory for 24 integers (96 bytes, sizeof(int) = 4).
sizeof(arr[2]): arr[2] refers to the third row of the 2D array arr, which is an array of 4 integers. sizeof(arr[2]) will be the size of this array, 4 * sizeof(int) = 4 * 4 = 16 bytes.
sizeof(p): p is a pointer, and the size of a pointer is 8 bytes (given sizeof(int *) = 8).
sizeof(*p): *p dereferences the pointer p, which points to an array of 12 integers. sizeof(*p) will be the size of this array, 12 * sizeof(int) = 12 * 4 = 48 bytes.