title: C Parameter Array Declarators
body: <p>In C99 there are variable-length arrays, and there can be static qualifiers (and type qualifiers) in parameter array declarators:</p>
  
  <pre><code>void f(int i, int *a);
  void f(int i, int a[]);
  void f(int i, int a[i]);
  void f(int i, int a[*]);         // Only allowed in function prototypes.
  void f(int i, int a[static i]);
  </code></pre>
  
  <p>Since array function parameters simply decay to pointers, is there any practical difference between the previous declarations, or is it a matter of style? When should any of them be used? In particular, what does the <code>static</code> qualifier imply? The standard does not render well clear the reason for each syntax.</p>