#include <stdio.h>

int main()
{
   int y = -1;
   int x = 0;
   int* p = &x;
   int** q = &p;
   int*** r = &q;

   printf("lval(y) = %p[%d], rval(y) = %d\n", &y, &y, y);
   printf("lval(x) = %p[%d], rval(x) = %d\n", &x, &x, x);
   printf("rval(p) = %p\n\n", p);

   printf("lval(p) = %p\n", &p);
   printf("rval(q) = %p\n\n", q);

   printf("lval(q) = %p\n", &q);
   printf("rval(r) = %p\n\n", r);


   **q = *p + 3;
   printf("lval(**q) = %p, rval(*p) = %d, rval(x) = %d\n\n", &**q, *p, x);

   /* which has higher precedence: * or ++ ? */
   *p++;
   printf("rval(p) = %p (%d), x = %d\n\n", p, *p, x);

   ***r += *p + x * 2;
   printf("lval(***r) = %p, rval(*p) = %d, rval(x) = %d\n", &***r, *p, x);
}
