3項演算子 コンマ演算子

3項演算子 ?

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];
	}
}