title: Aren't a[][] and (*a)[] equivalent as function parameters?
body: <p>Function prototype   </p>
  
  <pre><code>void foo(int n, int a[][]);
  </code></pre>
  
  <p>gives error about incomplete type while  </p>
  
  <pre><code>void foo(int n, int (*a)[]);  
  </code></pre>
  
  <p>compiles. As per the decay rule <code>int a[][]</code> is equivalent to <code>int (*a)[]</code> in this case and therefore <code>int (*a)[]</code> should also give an error about an incomplete type but GCC seems to accept it. Is there anything I am missing? 
  This might be a GCC bug but I didn't find anything related to it.</p>