详解逗号表达式

简介: 详解逗号表达式

1.什么叫做逗号表达式

 逗号表达式(comma expression)是 C 语言中的一种运算符,它使用逗号将两个或多个表达式连接在一起形成一个新的表达式。(本质上还是一种运算)

格式:

(expression1, expression2, ..., expressionN)

expression都是C语言中常见的表达式

2.逗号表达式的执行

执行规则:从左至右依次执行expression,并将最后一个expression作为逗号表达式的结果

下面请看代码:

int main()
{
  int x, y;
  x = (5, 3, 9);//5,3可直接忽略,最后会将9赋给x;
  y = (x++, x + 2, x * 2);
  //等价于
  int x, y;
  x = 9;
  y = (x++, x + 2, x * 2);
  //y的最后结果为20
  //1.x++等价于x=x+1,所以这一步x变为10;
  //2.x+2 执行结果为12,但并没有进行赋值操作,所以x还是为10;
  //3.执行y=x*2;对于逗号表达式来说,只有最后一个子表达式才有赋值的操作
  return 0;
}
int main()
{
    int arr[] = { 1,2,(3,4),5 };
    printf("%d\n", sizeof(arr));//输出结果是16
    return 0;                   //(3,4)是逗号表达式,从左向右执行,等价于4
                                //也即等价于arr[]={1,2,4,5};
}

3.逗号表达式常见用法

  • 在一些特定的循环语句中,例如 for 循环体中的多条语句需要计算。
for (int i = 0, j = n - 1; i < j; ++i, --j)
//定义变量时一次定义了两个,使代码更加简洁紧凑
  • 定义函数或宏时
#define MAX(a,b) ((a)>(b) ? (a):(b))
int main()
{
  int a = 10;
  int b = 20;
  int c = MAX(a, b);
  return 0;
}
  • 多个计算过程需要放在一个表达式中,但是你只需要最后一个表达式的结果。例如 a++, b++, c++, d++ 这样的连续的自增操作,可以写成 (a++, b++, c++, d++) 这样的逗号表达式,既简洁又清晰。

4.总结

逗号表达式是C语言常见的一种运算符,使用得当会使得代码的效率大大提升,但也要注意逗号表达式不易理解的特点,避免造成不必要的麻烦

目录
相关文章
|
SQL 存储 监控
实用技巧:排查数据异常/数据波动问题,该如何下手?
在我做开发的这些年,让我很头痛的一类问题,不是线上故障,而是数据异常,不知道有没有程序员跟我感同身受。大多数的服务故障都有较为直观的异常日志,再结合产品表象,相对排查起来还有迹可循,但数据异常的原因就太多了,很多时候连报错日志都没有,排查起来简直无从下手。
实用技巧:排查数据异常/数据波动问题,该如何下手?
|
Ubuntu Java Linux
update-alternatives命令如何使用?
【8月更文挑战第5天】update-alternatives命令如何使用?
1005 5
ASCII编码字符分布
ASCII编码字符分布
795 2
|
JSON 前端开发 测试技术
Postman 接口测试工具详解
在执行这些测试案例时,请确保遵循实际的API规范,并根据API的特定要求调整步骤和参数。
375 0
|
Unix Linux Go
流量回放工具之 Goreplay 安装及初级使用
【6月更文挑战第2天】流量回放工具之 Goreplay 安装及初级使用
1193 3
|
存储 Java 关系型数据库
544基于SSM的蛋糕甜品店管理系统的设计与开发
544基于SSM的蛋糕甜品店管理系统的设计与开发
|
Python 容器
.pack(side=tk.LEFT
.pack(side=tk.LEFT
242 1
|
Go
跳出多层循环,goto语句助你一臂之力
跳出多层循环,goto语句助你一臂之力
411 0
|
存储 算法 编译器
【C/C++ 逗号表达式】C/C++中的逗号运算符
【C/C++ 逗号表达式】C/C++中的逗号运算符
283 0
|
Java 数据库 关系型数据库
优秀的代码都是如何分层的?
好的应用分层应该做到1.方便后续代码进行维护扩展;2.分层的效果需要让整个团队都接受;3.各个层职责边界清晰。本文针对controller,service, mapper三个维度的应用分层进行整理,以优化后续代码的维护
10432 0