Where is the hidden storage?
<p>I am little confused over the following situation</p>

<pre><code>const char c = 'C';
char * p = const_cast&lt;char *&gt;(&amp;c);

*p = 'K';
cout &lt;&lt; " c = " &lt;&lt; c &lt;&lt; endl;
cout &lt;&lt; " *p = " &lt;&lt; *p &lt;&lt; endl;

printf("c's address      : %u\n", &amp;c);
printf("P is pointing to : %u\n", p);
</code></pre>

<p>Which outputs as below on execution</p>

<pre><code>c = C
*p = K
c's address      : 3221180271
P is pointing to : 3221180271
</code></pre>

<p>Here I can observe that both '&amp;c' and 'p' having the same address in the memory. </p>

<p>Then what is the hidden mechanism by which 'p' is capable of storing a different value than 'c' is storing whereas both share the same address space in the memory?</p>
