* doesn't (have to) mean "pointer"!
It works in simple cases, but I find the consistent thing to do is read it as "dereference".
double volatile *(const immutable_pointer);
// immutable_pointer is immutable, when you dereference it you'll get a volatile double