逗号表达式

2018-06-19  本文已影响0人  苦瓜1512

1. 逗号表达式的一般形式

表达式1, 表达式2, ..., 表达式n

PS:

  1. 逗号运算符优先级最低
  2. 逗号运算符的结合性从左至右
  3. 逗号表达式的值等于最后一个表达式的值
#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 逗号运算符的优先级比赋值运算符的优先级低

  1. 第二条语句由逗号运算符连接两个表达式组成,第一个表达式为c=(a-=a-5),第二个表达式为(a=b,b+3)
  2. 逗号运算符的结合顺序为从左到右,先计算左边的表达式c=(a-=a-5)
  3. 左边表达式是一个赋值表达式,把表达式(a-=a-5)的值赋给变量c,需要先计算表达式(a-=a-5)的值
  4. 表达式(a-=a-5)-=的优先级比-低,先计算-=右边表达式的值,为0-5=-5,由此a-=a-5把变量a的值改变为5,表达式(a-=a-5)的值也为5
  5. 所以变量c的值为5
  6. 第二个表达式(a=b,b+3)由也是一个逗号表达式,左侧的赋值表达式把变量b的值赋给变量a,所以a = 0, b = 0,第二个表达式虽然有运算,但是运算结果没有保存,所以对三个变量的值没有影响
  7. 所以,变量a, b, c的值分别为0, 0, 5
上一篇 下一篇

猜你喜欢

热点阅读