先ずは、一つ目なのですが
char *p = s; は char s[] = "I love dog and cat."; を指しているのでしょうか?

二つ目は、whileの中にif文があるやつが、わかりませんので
解説をして戴ければ、ありがたいです。forの二重ループとは、違いますよね?

三つ目は、p-s+1 の意味です、これが何だかわかりません。
特にp-sとは・・・・?

四つ目は、n++とP++ です、これのp++の方は
参考書に、”探し当てた文字の次から探します。”と
だけ書いてあります。なら、n++は何なんでしょうか?

これらの、四つがわかりません。