とあったとき、最初の int は(例えば整数が32bitだとすると)、「intとして扱う、4バイトの領域」 という意味でしかなく、 まだこの瞬間には物理的にどこかのアドレスには何も確保されていない。 そして次に x と、変数名が来たとき、 どこかにメモリが4バイト分確保され、それをあらわす名前として x が割り当てられている、という動きになる。
これを踏まえて、
int *y;
は、最初の int で int として扱う4バイトの領域という型が宣言され、その次の * は、ワイルドカードの * と似た意味で、 「どこかのアドレス」 という意思を表している。 つまり int * だ。 で、しかしこれだけだと流石にその後扱えないので、その次でこれ自体に名前を求めている。これが y 。