C言語の char x[] と, char *x の違いを理解するためのコード

問題:

int main(){
	char x[] = "hoge";
	char *y = "hoge";
	x[0]='a';
	y[0]='a';
	return 0;
}

このコードはセグメンテーションフォールトになります.どこが悪いでしょう?