number = {12,13,14}
スカラー初期化ですが、必要以上の要素を提供しています。コンパイラは警告をスローしますが、これは無視され、最初の要素 12 が variable に割り当てられていると思いますnumber
。
ご利用の際はnumber = (12,13,14)
、
コンマ ( ,
) 演算子は、最初のオペランドを評価して結果を破棄し、次に 2 番目のオペランドを評価して結果を返します。
したがって、ここでは 12 が破棄され、13 が 13 と評価されて返されます。この返された 13 の値は、次のコンマ演算子の最初のオペランドです。ここで、13 から 13 を評価し、この結果 13 を破棄して、2 番目のオペランド、つまり 14 を評価し、結果を variable に割り当てられた 14 として返しますnumber
。
あなたが次のことをするとき
number = 12,13;
printf("%d",number);
これは 12 を出力します。これは、優先順位が 12=
より大きい,
ため、最初number = 12
に評価され、=
割り当てられた値、つまり 12 が返されます。ここで、コンマ演算子は、演算の戻り値、つまり 12 と 13 の 2 つのオペランドを取得しまし=
た。コンマ演算子を使用すると、12 は 12 として評価され、破棄されます。13 が評価されて返されます。に戻った?誰でもない。number
割り当てが既に実行されているため、割り当てられていません。ようnumber = 12,13;
に見える(number=12),13;
これも試してみてください。
int num1,num2;
num2 = (num1 = 13,14);
printf("%d %d",num1,num2);
これは13 14
、以前のコード出力に指定された引数に従って出力されます。