How would this be different from &? It is also a unary operator and && is a different binary operator.
'||' and '&&' are distinct tokens in C as far as i know, i.e. not handled as two consecutive '|'s or '&'s.
So your example would unambiguously be parsed as "a to the b:th power". Whereas the other case would need explicit parens:
int c = a * (*b);
Similar example for &: int a = 1;
int b = 1 && a; /* 1 LOGICAL_AND a */
int c = 1 & (&a); /* 1 AND address of a */