C语言中逗号运算符和逗号表达式

写在前面

           在写题过程中,对逗号表达式的运算有些困惑,查阅资料后明白了一些,把我理解的整理出来和大家分享。如有不当之处,烦请各位批评指正。🌹

一、逗号运算符

使用逗号运算符是为了把几个表达式放在一起。

示例

1+1,3+5

二、逗号表达式

使用逗号运算符连接起来的多个表达式即为逗号表达式。

从本质上讲,逗号的作用是将一系列运算按顺序执行。

格式:表达式1,表达式2,表达式3

示例:结果为8

(1+1,3+5)

整个逗号表达式的值为系列中最后一个表达式的值。如本例中3+5=8

逗号表达式计算方法:

  1. 从左到右逐个计算
  2. 整个表达式作为一个整体,它的值是最后一个表达式的值
  3. 逗号运算符是所有运算符中级别最低的

 示例一

a=2*5,a*4

对此表达式的求解,大家可能会有两种不同的理解:

        一种认为“2*5,a*4” 是一个逗号表达式,先求出此逗号表达式的值, 如果a的原值为3,则逗号表达式的值为12,将12赋给a, 因此最后a的值为12。

        另一种认为:“a=2*5”是一个赋值表达式”,“a*4”是另一个表达式,二者用逗号相连,构成一个逗号表达式。这两者哪一个对呢?

        我们知道,赋值运算符的优先级别高于逗号运算符, 因此应先求解a=2*5(也就是把“a=2*5”作为一个表达式)。经计算和赋值后得到a的值为10,然后求解a*4,得40。整个逗号表达式的值为40。

示例二

#include<stdio.h>

void main()

{
 int a;

 printf("%d\n",(a=3*5,a*4,a+5));

}

本例结果为: 20
对于逗号表达式,从左往右进行计算,赋值运算a = 15,然后计算a * 4 = 60,再者计算a + 5 = 20,20作为这个逗号表达式的最终结果打印出来 

一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如(a=3*5,a*4),a+5 先计算出a的值等于15,再进行a*4的运算得60(但a值未变,仍为15),再进行a+5得20,即整个表达式的值为20。

由于逗号运算符级别是最低的,所以下面两个表达式的作用也是不同的:

示例三

① x=(a*2,3*2)
② x=a=2,a*3

①是赋值表达式,将一个逗号表达式的值赋给x,x的值等于6

②是一个赋值表达式和一个算术表达式,x的值为2

注意

并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的。如

printf("%d,%c,%d",a,b,c);//这里的“a,b,c”并不是一个逗号表达式,它是printf函数的3个参数,参数间用逗号间隔。

如果改写为

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

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

示例

若x和y都是int型变量,x=100,y=200,且有下面的程序片段:

printf("%d",(x,y)); //(x,y)是一个逗号表达式,其值为y

上面程序片段的输出结果是200

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君 淮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值