3項演算子は、次のように3つの項を記述するので、そう呼ばれます。
条件式 ?
条件成立時の結果を表現する式 :
条件不成立時合の結果を表現する式
これは、if文が使えない(式が書ける)所で、条件により違う結果を表現した場合に使います。
以下に例を示します。
printf("%d\n" , d < 0 ? -d : d );
dが負でも正の表示をしています
int *p = arg[0] == '\0' ? NULL : arg;
arg[0]が'\0'ならNULL、そうでなければargで、変数pを初期化しています。
for(i = flag==1 ? 0 : 1; i < count ; i++){
flagが1なら0、そうでなければ1をiに記憶して、繰り返しを始めています。
コンマの左に書いた式の結果を算出し、
次にコンマの右に書いた式のを評価し、それをコンマ演算子 , の演算結果にします。
そしてコンマ演算子は、最も優先順位が低い演算子です。
それで、一つの式しか書けない箇所に、
複数の式をコンマで区切り、複数の式を一つの式にするまとめる働きで使われます。
例えばfor(繰り返し前処理; 判定式;次の繰り返し前処理)において、
繰り返し前処理や、次の繰り返し前処理に
書けるのは、一つの式ですが、コンマ演算子を使えば複数の変更が、
次のように可能となります。
/* a2の配列を、a1へ逆の順番でコピー */ void rev_copy(int * a1, int * a2, int count) { int i,k; for(i=0, k=count-1; i < count; i++,k--){ a1[i] = a2[k]; } }