你真的明白逗号表达式吗?

偶然间看到一个C程序,其中有一部分是这样的:

#include <stdio.h>
int main() {
    int a = (100, 200);
    printf("%d", a);
    return 0;
}

 当我看到这个表示方式的时候挺懵的,因为我确实不知道a的值为多少,因此我自己试了一下,发现答案是200。

为什么呢?

我一时真的没弄明白,于是查阅了很多资料,终于明白了其中的原理。

逗号表达式的运算级

逗号表达式的运算级是c语言中最低的,赋值运算符往往是一行程序中最后被执行的,但是可以看见上面的程序中给赋值运算符右边的表达式加了一个括号,目的就是为了提高逗号运算符的优先级。

任何一个表达式都有返回值

首先要明确的一点就是,任何一个表达式都有返回值,逗号表达式也不例外。

那逗号表达式的返回值是什么?

是他所连接的表达式最右侧的值。

 这样一来就能解释的通了。

在上面的那个例子中,(100,200)被逗号表达式连接成为两个表达式,也就是相当于如下的效果:

100;
200;

然后返回最后一个表达式的值:200

为了加强理解我们再举一个例子:

#include <stdio.h>
int main() {
    int a =  100;
    int b = 200;
    int c = (a * b, a + b, a * 2);
    printf("%d", c);
    return 0;
}

上面的这个程序中,有两个逗号表达式:
分别是a * b和a + b中间的一个,另一个是a + b和a * 2中间的一个。

这个程序会输出什么呢?答案是:a * 2,也就是200

分析:

逗号表达式的作用是将多个表达式连接在一起然后返回最后一个表达式的值,因此可以把他对表达式的作用看成这样:

逗号表达式是从左向右依次运算的,因此先处理前面两个表达式:

a * b;
a + b;

返回的是a + b,然后继续和后面的逗号表达式运算:

300; //因为逗号表达式的优先级很低,所以上一个返回的表达式的值已经被算出来了
a * 2;

 返回a * 2 的值,为200。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

若亦_Royi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值