1. 逗号表达式的一般形式
表达式1, 表达式2, ..., 表达式n
PS:
- 逗号运算符优先级最低
- 逗号运算符的结合性从左至右
- 逗号表达式的值等于最后一个表达式的值
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
    int a, b, c;
    a = (b=9,c=33);                                                                                                     
    printf("a=%d\n", a); 
    return 0;
}
=============================
a=33
real    0m0.010s
user    0m0.000s
sys 0m0.000s
请按 ENTER 或其它命令继续
若有以下程序段:
int a = 0, b = 0, c = 0
c = (a -= a-5), (a = b, b+3);
printf("%d, %d, %d\n", a, b, c);
执行后输出的结果是( )
A. 3,0,-10
B. 0,0,5
C. -10,3,-10
D. 3,0,3答案:B 逗号运算符的优先级比赋值运算符的优先级低
- 第二条语句由逗号运算符连接两个表达式组成,第一个表达式为
c=(a-=a-5),第二个表达式为(a=b,b+3)- 逗号运算符的结合顺序为从左到右,先计算左边的表达式
c=(a-=a-5)- 左边表达式是一个赋值表达式,把表达式
(a-=a-5)的值赋给变量c,需要先计算表达式(a-=a-5)的值- 表达式
(a-=a-5)中-=的优先级比-低,先计算-=右边表达式的值,为0-5=-5,由此a-=a-5把变量a的值改变为5,表达式(a-=a-5)的值也为5- 所以变量
c的值为5- 第二个表达式
(a=b,b+3)由也是一个逗号表达式,左侧的赋值表达式把变量b的值赋给变量a,所以a = 0, b = 0,第二个表达式虽然有运算,但是运算结果没有保存,所以对三个变量的值没有影响- 所以,变量
a, b, c的值分别为0, 0, 5