title: argv pointer to an array of pointers
body: <p>I am confused as to how the following passage matches up with the code that follows it:</p>
  
  <blockquote>
    <p><strong>Since argv is a pointer to an array of pointers</strong>, we can manipulate the
    pointer rather than index the array. This next variant is based on
    incrementing argv, which is a pointer to pointer to char, while argc
    is counted down:</p>
  </blockquote>
  
  <pre><code>#include &lt;stdio.h&gt;
  /* echo command-line arguments; 2nd version */
  main(int argc, char *argv[])
  {
      while (--argc &gt; 0)
          printf("%s%s", *++argv, (argc &gt; 1) ? " " : "");
      printf("\n");
      return 0;
  }
  </code></pre>
  
  <p>Isn't <code>char *argv[]</code> just an array of pointers? Wouldn't a pointer to an array of pointers be written as <code>char *(*argv[])</code> or something similar?</p>
  
  <p>As a side note, is it normal that in general I find declarations that mix arrays and pointers rather confusing?</p>