ついでだから、もう少し。
変数と単項*演算子、[]演算子、->演算子は常に左辺値を生じさせる
また、.演算子も通常、左辺値を生じさせが、その他演算子は左辺値を生じさせない
by 規格
で、?:演算子で左辺値を生じさせる(↓のような)ものは規格外の動作

#include <stdio.h>
int main()
{
  int i=1,j=2,k=3;
  k>2?i:j=4; /* 4 を ( k>2 が真なら i に 偽なら j に ) 代入 */
  printf("%d, %d, %d\n",i,j,k);
  return 0;
}