title: L value vs R value in C
body: <p>I am answering a textbook question from <a href="http://www.cs.sjsu.edu/~louden/pltext/" rel="noreferrer">this textbook</a>. </p>
  
  <p>I am learning about pointers in C and have come across l-values and r-values. From my understanding:</p>
  
  <pre><code>l-values are values that are defined after they are executed (++x)
  r-values are values that are not defined after they are executed (x++)
  </code></pre>
  
  <p>It that correct?</p>
  
  <p>The question I wanted to answer (with my attempts):</p>
  
  <pre><code>a) Which of the following C expressions are L-Values?
     1.  x + 2 Not a L value
     2.  &amp;x    Is a L value
     3.  *&amp;x   Is a L value
     4.  &amp;x + 2  Not a L value
     5.  *(&amp;x + 2) Is a L value
     6.  &amp;*y  Is a L value
  
  b) Is it possible for a C expression to be a L-value but NOT a R-value? Explain
     I've read that a L value can be a R value but not vice versa. I can't think of an example of something being an L value but not a R value.
  
  c) Is &amp;(&amp;z) ever legal in C? Explain
     Assuming this is not legal since a memory address doesn't have its own memory address?
  </code></pre>
  
  <p>Am I close? Thanks</p>