title: Differences when using ** in C
body: <p>I started learning C recently, and I'm having a problem understanding pointer syntax, for example when I write the following line:</p>
  
  <pre><code>int ** arr = NULL;
  </code></pre>
  
  <p>How can I know if:</p>
  
  <ul>
  <li><p>arr is a pointer to a pointer of an integer</p></li>
  <li><p>arr is a pointer to an array of pointers to integers</p></li>
  <li><p>arr is a pointer to an array of pointers to arrays of integers</p></li>
  </ul>
  
  <p>Isn't it all the same with <code>int **</code> ?</p>
  
  <p><hr>
  Another question for the same problem:</p>
  
  <p>If I have a function that receives <code>char ** s</code> as a parameter, I want to refer to it as a <code>pointer</code> to an array of strings, meaning a pointer to an array of pointers to an array of <code>chars</code>, but is it also a pointer to a pointer to a <code>char</code>?</p>