naja, ich dachte mir, dass einer vielleicht mal die Lösungen nennen könnte, damit ich diese dann mit meinen Gedanken vergleichen kann.

Da die Fehlerhaften sich nun geklärt haben, hab ich sie mal nun rausgenommen.

Code:
*(p2 + x) -> int, aber es müsste zu einer Bereichsüberschreitung kommen
p1 == p3 ? f1 : pf -> ? 
!p2 -> int, nur eine 1 oder 0 wegen Negation
*p1 && p1 -> int, nur eine 1 oder 0 wegen logischem Und
s || x -> int, nur eine 1 oder 0 wegen logischem Oder
pf2 == f3 -> int, nur eine 1 oder 0 wegen Gleichheit
s | x -> long int (?)
pf = f1 -> ?
pf2 = f3 -> ?
Die mit einem ? markierten sind die, wo ich mir nicht im Klaren bin.
Ob die anderen so weit richtig sind, weiß ich auch nicht.