title: What's the difference between `typeof(array)` vs `typeof(*array) *`
body: <p>To be more specific, I'm struggling to comprehend why this fails in compilation:</p>
  
  <pre><code> int array[] = {4, 3, 2, 1};
   typeof(array) __array_copy = (array);
  </code></pre>
  
  <p>with the error being:</p>
  
  <pre><code>main.c: In function 'test_map':
  main.c:113: error: invalid initializer
  </code></pre>
  
  <p>However this works:</p>
  
  <pre><code> int array[] = {4, 3, 2, 1};
   typeof(*array) *__array_copy = (array);
  </code></pre>
  
  <p>What exactly is the difference between <code>typeof(array)</code> vs <code>typeof(*array) *</code>?</p>