光天化日学C语言(21)- 逗号运算符 | 压缩代码的神器

Posted 英雄哪里出来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了光天化日学C语言(21)- 逗号运算符 | 压缩代码的神器相关的知识,希望对你有一定的参考价值。

🙉饭不食,水不饮,题必须刷🙉

还不会C语言,和我一起打卡!
🌞《光天化日学C语言》🌞

LeetCode 太难?上简单题!
🧡《C语言入门100例》🧡

LeetCode 太简单?大神盘他!
🌌《夜深人静写算法》🌌

一、前言

  本文作者是从 2007 年开始学 C语言 的,不久又接触了C++,基本就是 C/C++ 技术栈写了 14 年的样子,不算精通,但也算差强人意。著有《夜深人静写算法》系列,且承诺会持续更新,直到所有算法都学完。主要专攻 高中 OI 、大学 ACM、 职场 LeetCode 的全领域算法。由于文章中采用 C/C++ 的语法,于是就有不少读者朋友反馈语言层面就被劝退了,更何况是算法。
  于是,2021 年 06 月 12 日,《光天化日学C语言》 应运而生。这个系列文章主要服务于高中生、大学生以及职场上想入坑C语言的志同道合之人,希望能给祖国引入更多编程方面的人才,并且让自己的青春不留遗憾!
  这一章的主要内容是逗号运算符。

二、人物简介

  • 第一位登场的就是今后会一直教我们C语言的老师 —— 光天。
  • 第二位登场的则是今后会和大家一起学习C语言的没什么资质的小白程序猿 —— 化日。

三、逗号运算符

  • 今天,我们就来看下逗号运算符和逗号表达式吧。
  • 在 C语言 中,可以把多个表达式用逗号连接起来,构成一个更大的表达式。其中的逗号称为 逗号运算符,所构成的表达式称为 逗号表达式。逗号表达式中用逗号分开的表达式分别求值,以最后一个表达式的值作为整个表达式的值。

简单来说,逗号表达式遵循两点原则:
  1)以逗号分隔的表达式单独计算;
  2)逗号表达式的值为最后一个表达式的值;

四、逗号运算符的应用

1、连续变量定义

  • 逗号运算通常用于变量的连续定义,如下:
#include <stdio.h>
int main() {
    int a = 1, b = 2, c = 3, d = 1 << 6, e;
    printf("%d\\n", a + b + c + d);
    return 0;
}
  • 这里的int a = 1, b = 2, c = 3, d = 1 << 6, e就是逗号表达式。

2、循环语句赋初值

  • 逗号运算通常用于for结构的括号内的第一个表达式,用于给多个局部变量赋值。
  • 一段对 110的数求立方和的代码,如下:
#include <stdio.h>
int main() {
    int i, s;
    for(i = 1, s = 0; i <= 10; ++i) {
        s += i*i*i;
    }
    printf("%d\\n", s);
    return 0;
}
  • 这里的i = 1, s = 0就是逗号表达式。
  • 有关于for的内容,会在后面的章节来介绍,暂时只需要知道可以使用逗号表达式来对一些变量赋予初值。

3、交换变量

  • 我们在实现交换变量的时候,往往需要三句话:
int tmp;
tmp = a;
a = b;
b = tmp;
  • 有了逗号表达式,我们就可以这么写:
int tmp;
tmp = a, a = b, b = tmp;

五、逗号运算符注意事项

  • 需要注意的是,逗号运算符的优先级非常低,甚至比赋值运算符还要低,所以当它和赋值运算符相遇时,是优先计算赋值运算的,如下代码所示:
#include <stdio.h>
int main() {
    int x, y, a, b;
    a = (1, x = 2, y = 3);
    b = 1, x = 9, y = 3; 
    printf("%d %d\\n", a, b);
    return 0;
}
  • 这段代码中ab的的赋值,只差了一个括号,但是结果截然不同。
  • 输出的结果为:
3 1
  • 原因是因为(1, x = 2, y = 3)表达式的值为以逗号分隔的最后一个表达式的值,即3;而在b = 1, x = 9, y = 3中,由于逗号运算符的优先级很低,导致表达式分成了三部分:b = 1x = 9y = 3,所以才有 a = 3 a=3 a=3 b = 1 b=1 b=1

通过这一章,我们学会了:
  1)逗号运算符;
  2)逗号表达式;

  • 希望对你有帮助哦 ~ 祝大家早日成为 C 语言大神!

课后习题


📢博客主页:https://blog.csdn.net/WhereIsHeroFrom
📢欢迎各位 👍点赞 ⭐收藏 📝评论,如有错误请留言指正,非常感谢!
📢本文由 英雄哪里出来 原创,转载请注明出处,首发于 🙉 CSDN 🙉
作者的专栏:
  👉C语言基础专栏《光天化日学C语言》
  👉C语言基础配套试题详解《C语言入门100例》
  👉算法进阶专栏《夜深人静写算法》

以上是关于光天化日学C语言(21)- 逗号运算符 | 压缩代码的神器的主要内容,如果未能解决你的问题,请参考以下文章

❤️光天化日学C语言❤️(20)- 赋值运算符与赋值表达式 | 让代码变得更加简洁

❤️光天化日学C语言❤️(20)- 赋值运算符与赋值表达式 | 让代码变得更加简洁

光天化日学C语言(19)- 位运算 >> 的应用 | 右移的一些高端用法

光天化日学C语言(22)- 运算符优先级和结合性 | 有了这张表,再也不怕记不住了

光天化日学C语言(13)- 位运算概览 | 开启位运算的征程

光天化日学C语言(10)- 关系运算符 | 3 > 2 > 1 真的成立吗?(建议收藏)