You have an array of 5 integers (named p[]). Then you have an array of pointers (named a[]), where each one points to an integer element in p[], respectively.
In the print statement, the program will print out 3 numbers. It's equivalent to:
printf("%u %u %u",&a[0],*(&a[0]),*(*(&a[0])));
This is because an array name that is not followed by a subscript is interpreted as a pointer to the first element of the array. Therefore,
The first one is the address of the array a[]. (Value will vary from one run to another even on the same machine, same compiler, but essentially an address is a large number)
The second one, it's the deferenced value of address of the first pointer, which is the address of first integer element in array p. (read this slowly three times) (again a large number that varies from run to run)
The third one, it's the second one but also deferenced one more time, which is effectively the value of the first integer element in array p, which is 0.