title: Why do I need to use type** to point to type*?
body: <p>I've been reading Learn C The Hard Way for a few days, but here's something I want to really understand. Zed, the author, wrote that <code>char **</code> is for a "pointer to (a pointer to char)", and saying that this is needed because I'm trying to point to something 2-dimensional.</p>
  
  <p>Here is what's exactly written in the webpage</p>
  
  <blockquote>
    <p>A char * is already a "pointer to char", so that's just a string. You however need 2 levels, since names is 2-dimensional, that means you need char ** for a "pointer to (a pointer to char)" type.</p>
  </blockquote>
  
  <p>Does this mean that I have to use a variable that can point to something 2-dimensional, which is why I need two <code>**</code>?</p>
  
  <p>Just a little follow-up, does this also apply for n dimension?</p>
  
  <p>Here's the relevant code</p>
  
  <pre><code>char *names[] = { "Alan", "Frank", "Mary", "John", "Lisa" };
  char **cur_name = names;
  </code></pre>