Consider a read-only hardware register, of your network card for example.
It might change outside the control of the program, so the compiler is not allowed to cache its value in a register or optimize it away. Thus, volatile.
And it's read-only, so you shouldn't write to it. Thus, const.