C语言逗号运算符(,)

逗号运算符是二元运算符:

表达式1 , 表达式2


逗号运算符确保操作数被顺序地处理:先计算左边的操作数,再计算右边的操作数。右操作数的类型和值作为整个表达式的结果。左操作数只是为了副作用需要而被计算,它其值会被丢弃。在计算完左操作数之后,存在一个序列点,例如:
x = 2.7, sqrt( 2*x )

在上述表达式中,在 sqrt()函数被调用之前,赋值运算会首先发生。整个表达式的值是此函数的返回值。

逗号运算符的优先级是所有运算符中最低的。因此,前述例子中的表达式 x=2.7 不需要括号。然而,如果希望逗号运算的结果用于另一个赋值运算中,就需要使用括号:
y = ( x = 2.7, sqrt( 2*x ));

上述语句会把 5.4 的平方根赋值给 y。

在初始化列表或函数参数列表中的逗号是列表元素的分隔符,它不是逗号运算符。在这些地方,也可以使用逗号运算符,但必须使用括号:
y = sqrt( (x=2.7, 2*x) );

这个语句等效于前面例子的语句。逗号运算符允许将多个表达式组合成为一个表达式。这个特点使得它适用于在 for 循环头部初始化或递增多个变量,如下例所示:
int i; float fArray[10], val;
for ( i=0, val=0.25; i < 10; ++i, val *= 2.0 )
   fArray[i] = val;

推荐文章
vi文本跨行移动(m命令)

vi编辑器提供文本的跨行移动。这个操作允许用户将某一行的文本内容移动到指定位置。 vi编辑器使用m命令实现文本的跨行移动。该命令的使用方法为: imj 表示把第i行移至第j行的下方。下面实例演示了

Unity 3D关节

在Unity3D中,物理引擎内置的关节组件能够使游戏对象模拟具有关节形式的连带运动。 关节对象可以添加至多个游戏对象中,添加了关节的游戏对象将通过关节连接在一起并具有连带的物理效果。 需要注意的是

Linux GCC简明教程(使用GCC编写C语言程序)

市面上常见的Linux都是发行版本,典型的Linux发行版包含了Linux内核、桌面环境(例如GNOME、KDE、Unity等)和各种常用的必备工具(例如Shell、GCC、VIM、Firefox等)

Debug和Release的区别是什么(非常详细)?

VIP会员(带永久答疑)郝翔宇昨天问了我一个问题,他说无法在DevC++下调试,不管在任何地方打断点,一调试就闪退,程序不会在断点处暂停。 我思考了一下没有答案,决定远程操作,结果发现郝翔宇在

jQuery removeClass()方法删除class

在jQuery中,我们可以使用removeClass()方法来为元素删除一个class。 语法: $().removeClass("类名") 举例: .select

Qt QString类及常用函数功能详解

QString是Qt编程中常用的类,除了用作数字量的输入输出之外,QString还有很多其他功能,熟悉这些常见的功能,有助于灵活地实现字符串处理功能。 QString存储字符串釆用的是Unicode

webm是什么格式?

WebM由Google提出,是一个开放、免费的媒体文件格式。WebM影片格式其实是以Matroska(即MKV)容器格式为基础开发的新容器格式,里面包括了VP8影片轨和OggVorbis音轨,其中Go

MyBatis的工作原理

在讲解MyBatis工作原理之前,先来了解一下MyBatis的下载。教程中使用MyBatis3.4.5作为本教程的实践环境,也希望读者下载该版本,以便于学习。 MyBatis的版本可以通过“http

适配器模式(Adapter模式)详解

在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访

Linux nice和renice命令:改变进程优先级

当Linux内核尝试决定哪些运行中的进程可以访问CPU时,其中一个需要考虑的因素就是进程优先级的值(也称为nice值)。每个进程都有一个介于-20到19之间的nice值。默认情况下,进程的nice值为

Java内部类是什么?

在类内部可定义成员变量和方法,且在类内部也可以定义另一个类。如果在类Outer的内部再定义一个类Inner,此时类Inner就称为内部类(或称为嵌套类),而类Outer则称为外部类(或称为宿主类)。

外部链接和内部链接

外部链接和内部链接是常见的两种链接形式,它们对提升网站的权重都有很大的帮助。 外部链接 外部链接(ExternalLinks)是指从外部网站指向自己网站的链接,简称外链,通常被称为“反向链接”或“导

JSONP跨域请求入门教程(附带实例)

JSONP(JSONwithPadding)是在客户端生成标签来调用跨域脚本(服务器端脚本文件)的一个非官方协议。JSONP允许在服务器端动态生成JavaScript字符串返回给客户端,通过JavaS

1.定义变量DECLARE DECLAREvar_name[,...]type[DEFAULTvalue] DECLARE关键字是用来声明变量的; var_name参数是变量的名称,这里可以同时

Linux查看硬盘读写情况(汇总版)

除了CPU和内存,硬盘读写(I/O)能力也是影响Linux系统性能的重要因素之一。本节将介绍几个可用来查看硬盘读写性能的系统命令,并教大家如何通过这些命令的输出结果,判断出当前系统中硬盘是否处于超负荷

c++11新特性有哪些?

最近工作中,遇到一些问题,使用C++11实现起来会更加方便,而线上的生产环境还不支持C++11,于是决定新年开工后,在组内把C++11推广开来,整理以下文档,方便自己查阅,也方便同事快速上手。(对于异

C语言fopen函数的用法,C语言打开文件详解

在C语言中,操作文件之前必须先打开文件;所谓“打开文件”,就是让程序和文件建立连接的过程。 打开文件之后,程序可以得到文件的相关信息,例如大小、类型、权限、创建者、更新时间等。在后续读写文件的过程中

Hibernate hibernate.cfg.xml文件和C3P0连接池的配置

Hibernate的配置文件包含了数据库连接的相关信息,以及映射文件的基本信息。通常情况下,配置文件默认放在src目录下,发布后,该文件会在项目的WEB-INF/classes路径下。配置文件的常用配

HDFS的特点与使用场景

上节《HDFS入门教程》讲解了HDFS的底层原理,本节接着讲解一下HDFS的特点以及使用场景有。 适合存储超大文件 HDFS支持GB级别甚至TB级别的文件,每个文件大小可以大于集群中任意一个节点的磁

1.定义条件DECLARE DECLAREcondition_nameCONDITIONFORcondition_value conditionvalue: SQLSTATE[VALUE]sq