title: The behavior of unary & operator when met []
body: <p>I've been reading C11 6.5.3.2 p3</p>
  
  <blockquote>
    <p>The unary &amp; operator yields the address of its operand. If the operand has type “type”, the result has
    type “pointer to type”. If the operand is the result of a unary * operator, neither that operator nor
    the &amp; operator is evaluated and the result is as if both were omitted, except that the constraints on
    the operators still apply and the result is not an lvalue. Similarly, if the operand is the result of a []
    operator, neither the &amp; operator nor the unary * that is implied by the [] is evaluated and the result
    is as if the &amp; operator were removed and the [] operator were changed to a+ operator. Otherwise,
    the result is a pointer to the object or function designated by its operand.</p>
  </blockquote>
  
  <p>I can't understand most of this paragraph although reading it repeatedly.<br/>
  My problem parts are <code>* that is implied by the []</code>, <code>[]operator were changed to a + operator</code>, <code>function designated by this operand</code>. This paragraph is talking about &amp; but why does * appear and term "function designated" appear after saying []. And <code>[] operator were changed to a + operator</code> seems trying to say the definition of array : <code>E1[E2] = *((E1) + (E2))</code> What does these lines mean? I need some help.</p>