逗号表达式

文章详细解释了C语言中逗号表达式的特性和执行规则,包括其优先级最低、左结合性等特点,并通过多个例题说明没有括号时第一个表达式的结果为整个表达式的值,有括号时则是最后一个表达式的值。同时,文章还探讨了表达式中的赋值和运算顺序对结果的影响。
摘要由CSDN通过智能技术生成

一、逗号表达式特点

1、逗号表达式是C语言优先级最低的运算符。

2、逗号表达式是左结合性(即按从左到右顺序运算)的运算符。

二、常见表达式类型

 

我们可以发现例一和例二中,变量o最终的结果是完全不同的。

我们可以先把上面两个表达式简化成👇

例一:o = 表达式1,表达式2,表达式3;

因为逗号表达式是优先级最低的表达式,赋值表达式的优先级高,所以会把表达式1的值直接赋值给o

例二:o = (表达式1,表达式2,表达式3);

括号里中的先执行,逗号表达式是左结合性,所以会从左往右依次执行,最后再把表达式3的值赋值给o

小结论:
结合以上两个例子的运行结果我们可以得出一个结论:

当没有括号时,第一个表达式为整个表达式的值。

而有括号时,依次执行后,最后一个表达式为整个表达式的值。

而且所有的表达式都依次执行了。

例题一

逗号表达式a=2*6,a*3,a+5的值为_____ 

逗号表达式的结果是整个表达式执行完后最后的一个值。

所以我们可以假定逗号表达式的结果为o

把这个式子看成o=(a=2*6,a*3,a+5)

 a=2*6=12,此时表达式的值为12

a*3并不是一个赋值语句,此时表达式的值还是12

运算到这一步,可以看成o=(a+5)=12+5=17

该表达式的值为17
 

例题二

int a,表达式 (a=4*5,a+6),a++的值为_____

逗号表达式的结果是整个表达式执行完后最后的一个值。

所以我们可以假定逗号表达式的结果为o、

把这个式子看成o=((a=4*5,a+6),a++)

a=4*5=20,此时表达式的值为20

a+6并不是一个赋值语句,此时表达式的值还是20

a++是先赋值这条语句运算完后才会+1,直到这里,表达式的值为20

例题三

int a,表达式为(a=4*5,a+6),a++ 执行完后a的值为_____

这个例题是求a的值,而不是表达式的值,这里表达式2(也就是a++)中的a=a+1也是会执行的,所以a的值为21。

例题四

int x=5,y=8,z;

z=(x++,++y,x+y);

求z=_______

 既然有括号,那就先依次执行前面的表达式,再把最后一个表达式赋值给z,

先执行x++,x=x+1=5+1=6

再执行y++,y=y+1=8+1=9

最后z=x+y=6+9=15

PS:如果这里的表达式三为x+++y,则要注意了!

 z=(x++,++y,x+++y);

首先依次执行x++得x=6、++y得y=9

后置++的优先级大于前置++

所以这里是(x++)+y;而不是x+(++y);

(x++)+y这里先把x的值与y的值相加,随后x再自增加1

也就是z=x+y;x=x+1;

这里z的值还是15,但是x的值又加了1,x=7
 

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值