title: Understanding and manipulating pointers to integer arrays
body: <p>I am having troubles with the following code:</p>
  <pre><code>int a[] = {1, 2, 3, 4};
    
  fprintf(stdout,
          &quot;a      : %lu\n&quot;
          &quot;*a     : %d\n&quot;
          &quot;&amp;a     : %ld\n&quot;
          &quot;**(&amp;a) : %d\n&quot;,
          (unsigned long int)a,
          *a,
          (unsigned long int)&amp;a,
          **(&amp;a)
  );
  </code></pre>
  <p>Output:</p>
  <pre><code>a      : 140726063647232
  *a     : 1
  &amp;a     : 140726063647232
  **(&amp;a) : 1
  </code></pre>
  <p>i know that <code>&amp;a</code> is a pointer to the 1 D array. And <code>&amp;a</code>'s type is <code>int (*)[4]</code>.
  I am confused with how comes <strong><code>**(&amp;a): 1</code></strong>.</p>