title: What are those strange array sizes [*] and [static] in C99?
body: <p>Apparently the following function prototypes are valid in C99 and C11:</p>
  
  <pre><code>void foo(int a[const *]);
  
  void bar(int a[static volatile 10]);
  </code></pre>
  
  <p>What is the purpose of those strange subscript notations <code>*</code>, <code>static</code>, and CV qualifiers?</p>
  
  <p>Do they help distinguish statically typed arrays from variable-length arrays? Or are they just syntactic sugar?</p>