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
网友评论