int *p;
int x = 10;

p = &x;

printf("%d", *p);

これでは10が表示されるみたいですが、
char *p;

p = "aaaa";

printf("%s", *p);

こうするとエラーがでます。printf("%s", p)とすればaaaaと表示されます。
1番目に書いたほうは理解できたのですが、
同じように考えて2番目もするとエラーでした。
この違いはなんなんでしょうか?