title: Problems with 2 D arrays
body: <p>I wrote the following code in C:</p>
  
  <pre><code>#include&lt;stdio.h&gt;
  
  int  main()
  {
    int a[10][10]={1};
    //------------------------
    printf("%d\n",&amp;a);
    printf("%d\n",a);
    printf("%d\n",*a);
    //-------------------------
    printf("%d",**a);
  
    return 0;
  }
  </code></pre>
  
  <p>With the above 3 printf statements I got the same value. On my machine it's 2686384. But with the last statement I got 1.</p>
  
  <p>Isn't it something going wrong? These statements mean:</p>
  
  <ol>
  <li>The address of <code>a</code> is 2686384</li>
  <li>The value stored in <code>a</code> is 2686384</li>
  <li>the value that is stored at address of variable pointed by <code>a</code> (i.e. at 2686384) is 2686384.</li>
  </ol>
  
  <p>This means <code>a</code> must be something like a variable pointing towards itself...</p>
  
  <p>Then why is the output of <code>*(*a)</code> 1? Why isn't it evaluated as <code>*(*a)=*(2686384)=2686384</code>?</p>