式を複数書くときは、{ } で囲んでブロックにします。
しかし、for文の ( ) 内のようにブロックが使えない場所では、コンマ演算子を使って式を書き並べます。
コンマ演算子は、演算子の優先順位の表では一番下に出てきます。
変数宣言で変数を区切ったり、関数引数の区切りに使うコンマは、コンマ演算子ではありません。
#include <stdio.h> main() { int i, j; for( i = 0, j = 10; i < j; i++, j-- ) printf( "%d, %d\n", i, j ); } |
実行結果
0, 10 1, 9 2, 8 3, 7 4, 6 |
#include <stdio.h> #include <ctype.h> main() { int i; char *p, str[] = "Lupin 3rd"; for( p = str, i = 0; !isspace(*p) && *p != '\0'; p++, i++ ) printf( "str[%d]:%c\n", i, *p ); }*p がスペース文字でなく、'\0'でもないあいだプリントします。 str にスペース文字が含まれていないときに備えて *p != '\0' も必要です。 |
実行結果
str[0]:L str[1]:u str[2]:p str[3]:i str[4]:n |
【実験します】
上の例2で、繰り返しを続ける条件式を && でなく、コンマ演算子でつないだとすると、どうなるでしょう?
for を、次のように変えた場合です。
for( p = str, i = 0; !isspace(*p), *p != '\0'; p++, i++ )
実行結果は次のようになります。
str[0]:L str[1]:u str[2]:p str[3]:i str[4]:n str[5]: str[6]:3 str[7]:r str[8]:d
左の式の評価結果に関わらず、必ず右の式が実行され、それが全体の評価となります。
一番右の式 *p != '\0' だけが繰り返し条件として評価されるので、いつでも '\0' の前までの全ての文字が表示されます。
#include <stdio.h> main() { int i = 3, j = 5, k = 7; while( i, j, k ) { printf( "%d, %d, %d\n", i, j, k ); i--; j--; k--; } }(答えは、次回のC言語の Tips で ・・・)