title: Why is a point-to-volatile pointer, like "volatile int * p", useful?
body: <p><code>volatile</code> is to tell the compiler not to optimize the reference, so that every read/write does not use the value stored in register but does a real memory access. I can understand it is useful for some ordinary variable, but don't understand how <code>volatile</code> affects a pointer.</p>
  
  <pre><code>volatile int *p = some_addr;
  int a = *p; // CPU always has to load the address, then does a memory access anyway, right?
  </code></pre>
  
  <p>What is the difference if it has been declared as <code>int *p = some_addr</code>?</p>