<p>I've often used pointers to const objects, like so...</p>

<pre><code>const int *p;
</code></pre>

<p>That simply means that you can't change the integer that <code>p</code> is pointing at through <code>p</code>. But I've also seen reference to const pointers, declared like this...</p>

<pre><code>int* const p;
</code></pre>

<p>As I understand it, that means that the pointer variable <em>itself</em> is constant -- you can change the integer it points at all day long, but you can't make it point at something else.</p>

<p>What possible use would that have?</p>

Same as a "const int" ... if the compiler knows it's not going to change, it can be optimization assumptions based on that.
```
```
struct MyClass
{
    char* const ptr;
    MyClass(char* str) :ptr(str) {}

    void SomeFunc(MyOtherClass moc)
    {
         for(int i=0; i < 100; ++i)
         { 
                 printf("%c", ptr[i]);
                 moc.SomeOtherFunc(this);
         }
    }
}
```
```
Now, the compiler could do quite a bit to optimize that loop --- provided it knows that SomeOtherFunc() does not change the value of ptr.  With the const, the compiler knows that, and can make the assumptions.  Without it, the compiler has to assume that SomeOtherFunc will change ptr.