title: Dereferencing multi-dimensional array name and pointer arithmetic
body: <p>I have this multi-dimensional array:</p>
  
  <pre><code>char marr[][3] = {{"abc"},{"def"}};
  </code></pre>
  
  <p>Now if we encounter the expression <code>*marr</code> by definition (ISO/IEC 9899:1999) it says (and I quote) </p>
  
  <blockquote>
    <p>If the operand has type 'pointer to type', the result has type 'type'</p>
  </blockquote>
  
  <p>and we have in that expression that marr decays to a pointer to his first element which in this case is a pointer to an array so we get back 'type' array of size 3 when we we have the expression *marr. So my question is why when we do (*marr) + 1 we add 1 byte only to the address instead of 3 which is the size of the array.</p>
  
  <p>Excuse my ignorance I am not a very bright person I get stuck sometimes on trivial things like this.</p>
  
  <p>Thank you for your time.</p>