<p><pre><code>  int a[100];
  int *p = &amp;a[50];
  a[0] = 666;
  printf(&quot;%d\n&quot;, p[-50]);
</code></pre>
Remember that x[y] in C just means *((x)+(y)).  You can offset pointers with positive and negative offsets so long as the resulting pointer remains within the bounds of an object.<p>(EDIT: formatting so HN doesn&#x27;t misinterpret code point U+2A.)