1
C语言程序设计
1.3.4.7 2.4.7 逗号运算符和逗号表达式

2.4.7 逗号运算符和逗号表达式

C语言中,逗号的用途主要有两种:一是作为运算符,一是作为分隔符。

(1)逗号作为运算符

逗号作为运算符时,是用它将两个表达式连接起来。例如:

  49+52,61+83

称为逗号表达式,又称为“顺序求值运算符”。

逗号表达式的一般形式为:

  表达式1,表达式2

它的求解过程是:先求解表达式1,再求解表达式2。表达式2的值是整个逗号表达式的值。例如,上面的逗号表达式“49+52,61+83”的值为144。又例如,逗号表达式

  i=30*5,i*6

由于赋值运算符的优先级高于逗号运算符,其求解过程为:先求解i=30*5,经计算和赋值后得到i的值为150,然后求解i*6,得900。整个逗号表达式的值为900。

一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,例如:

  (i=4*5,i*3),i+50

先计算出i的值等于20,再进行i*3的运算得60(但i值未变,仍为20),再进行i+50 得70,即整个表达式的值为70。

逗号表达式的一般形式可以扩展为

  表达式1,表达式2,表达式3,…,表达式n

逗号表达式的值为表达式n的值。

逗号运算符的优先级是所有运算符中级别最低的。因此,下面两个表达式的作用是不同的:

①i=(j=30,5*30)

②i=j=30,5*i

①式是一个赋值表达式,将一个逗号表达式的值赋给i,i的值等于150。②式是逗号表达式,它包括一个赋值表达式和一个算术表达式,i和j的值都为30,整个表达式的值为150。

逗号表达式最常用于循环语句(for语句)中,详见第3章。

(2)逗号作为分隔符

逗号是C语言中的标点符号之一,用来分隔开相应的多个数据。例如,在定义变量时,具有相同类型的多个变量可在同一行中定义,其间用逗号隔开:

  int i,j,k;

另外,函数的参数也用逗号进行分隔,例如:

  printf("%d,%d,%d",a,b,c);

上一行中的“a,b,c”并不是一个逗号表达式,它是printf函数的3个参数,参数间用逗号间隔。有关函数的详细叙述见第6章。如果改写为

  printf("%d,%d,%d",(a,b,c),b,c);

则“(a,b,c)”是一个逗号表达式,它的值等于c的值。括弧内的逗号不是参数间的分隔符而是逗号运算符,括弧中的内容是一个整体,作为printf函数的一个参数。