what happens if you do printf("%p\n", y) then printf("%p\n", y[1]) are the results different?

i think the answer is that strings are effectively arrays so each character is stored at a separate address where as in your example *x points to a single address with the entire integer stored at that address.

a char takes one byte so it cant hold a whole string hence as you said each character is stored in separate memory addresses