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