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

原文:c语言中逗号运算符和逗号表达式

 C语言提供一种特殊的运算符——逗号运算符。用它将两个表达式连接起来。如:

  3+5,6+8

称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为

         表达式1,表达式2

逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。例如,上面的逗号表达式“3+5,6+8”的值为14。又如,逗号表达式
  a=3*5,a*4
对此表达式的求解,读者可能会有两种不同的理解:一种认为“3*5,a*4” 是一个逗号表达式,先求出此逗号表达式的值, 如果a的原值为3,则逗号表达式的值为12,将12赋给a, 因此最后a的值为12。另一种认为:“a=3*5”是一个赋值表达式”,“a*4”是另一个表达式,二者用逗号相连,构成一个逗号表达式。这两者哪一个对呢?赋值运算符的优先级别高于逗号运算符, 因此应先求解a=3*5(也就是把“a=3*5”作为一个表达式)。经计算和赋值后得到a的值为15,然后求解a*4,得60。整个逗号表达式的值为60。
  一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如(a=3*5,a*4),a+5 先计算出a的值等于15,再进行a*4的运算得60(但a值未变,仍为15),再进行a+5得20,即整个表达式的值为20。
  逗号表达式的一般形式可以扩展为

    表达式1,表达式2,表达式3……表达式n

它的值为表达式n的值。

  逗号运算符是所有运算符中级别最低的。因此,下面两个表达式的作用是不同的:

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

  第①个是一个赋值表达式,将一个逗号表达式的值赋给x,x的值等于18。第②个是逗号表达式,它包括一个赋值表达式和一个算术表达式,x的值为3。

  其实,逗号表达式无非是把若干个表达式“串联”起来。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值,逗号表达式最常用于循环语句(for语句)中.

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

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

  上一行中的“a,b,c”并不是一个逗号表达式,它是printf函数的3个参数,参数间用逗号间隔。
如果改写为

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

则“(a,b,c)”是一个逗号表达式,它的值等于c的值。括弧内的逗号不是参数间的分隔符而是逗号运算符。括弧中的内容是一个整体,作为printf函数的一个参数。
C语言表达能力强,其中一个重要方面就在于它的表达式类型丰富,运算符功能强,因而c使用灵活,适应性强

时间: 2024-12-22 22:10:07

c语言中逗号运算符和逗号表达式的相关文章

C语言中的运算符优先级

C语言中的运算符优先级问题,一般是不要求我们记的,但如果能记住,对快速理解代码和编程是有很大帮助的:若能快速记住,何乐而不为呢? 如果你喜欢,建议先下载我整理的运算符优先级pdf文档(http://download.csdn.net/detail/n289950578/7964209),对照一起看,更有助于理解. 1.优先级: 为了理解方便,将优先级分为六大类,速记为<非123赋>: 非运算符  () [] . ->: 单目运算  (!&* 右->左): 双目运算  (左-

Java语言中的----运算符

day05 Java语言中的----运算符 一.运算符概述: 运算符的使用在每一门开发语言中都会使用到,在不同的语言中也会有不同的使用规则.通过运算符我们可以联想到MySQL数据库中的运算符,这些都是差不多的,可能有些在使用上是不一样的.下面就来看看Java中的运算符. 二.运算符: 1.算术运算符: 主要包含:加.减.乘.除.取余(%).自加(++).自减(--) 2.赋值运算符: 就是等号(=) 3.位运算符: 主要包含:&.|.~.^.<<.>>.>>&g

C++逗号运算符与逗号表达式

C++将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句.循环语句等)中.这是C++语言灵活性的一种表现. 请注意,用cout语句输出一个赋值表达式的值时,要将该赋值表达式用括号括起来,如果写成“cout<<a=b;”将会出现编译错误. C++提供一种特殊的运算符——逗号运算符.用它将两个表达式连接起来.如    3+5, 6+8称为逗号表达式,又称为“顺序求值运算符”.逗号表达式的一般形式为:    表达式1, 表达式2逗号表达式

转: C语言中位运算符异或“∧”的作用

转自: http://blog.sina.com.cn/s/blog_74a459380101d6xl.html 异或运算符∧也称XOR运算符.它的规则是若参加运算的两个二进位同号,则结果为0(假):异号则为1(真).即0∧0=0,0∧1=1,1∧1=0.如: 即071∧052,结果为023(八进制数). “异或”的意思是判断两个相应的位值是否为“异”,为“异”(值不同)就取真(1),否则为(0). 下面举例说明∧运算符的应用: (1)使特定位翻转 假设有01111010,想使其低4位翻转,即1

C语言中#和##运算符使用分析

#运算符 #运算符用于在预处理期将宏参数转换为字符串 #的转换作用是在预处理期完成的,因此只在宏定义中有效 编译器不知道#的转换作用 1 #define STRING(x) #x2 printf("%s\n",STRING(Hello World!)); ##运算符 ##运算符用于在预处理期粘连两个标识符 ##的连接作用是在预处理期完成的,因此只在宏定义中有效 编译器不知道##的连接作用 1 #include<stdio.h> 2 #define STRUCT(type)

在语言中的运算符中,处于同一优先级别的运算符还分优先次序吗?

结合方向就是优先次序~~例如:*和/和%处于同一优先级,结合方向是自左向右,那么7*8/2%3的运算顺序就是7*8然后/2然后%3而赋值运算符+=和-=也处于同一优先级,结合方向是自右向左,那么7+=3-=2;运算顺序就是先算3-=2,结果为1,然后再算7+=1,结果为8~~~

C语言:逗号运算符

逗号运算符主要是用于连接表达式 例如:a=1+2,b=3*4 用逗号运算符连接起来的表达式称为逗号表达式 它的一般形式为:表达式1,表达式2,… …,表达式n逗号表达式的运算过程是:先算表达式1,再算表达式2,依次算到表达式n 整个逗号表达式的值是最后一个表达式的值

【学习笔记】【C语言】逗号运算符

逗号运算符主要用于连接表达式,例如: int a = 9; int b = 10; a = a+1 , b = 3*4; * 用逗号运算符连接起来的表达式称为逗号表达式,它的一般形式为: 表达式1, 表达式2, - -, 表达式n 逗号表达式的运算过程是:从左到右的顺序,先计算表达式1,接着计算表达式2,...,最后计算表达式n * 逗号运算符也是一种运算符,因此它也有运算结果.整个逗号表达式的值是最后一个表达式的值 int a = 2; int b = 0; int c; c = (++a,

javascript学习笔记---ECMAScript运算符(乘性,加性,关系,等性,关系,赋值,逗号运算符)

乘性:乘法,除法,取模,(特殊数字[Infinity,-Infinity,NaN,0]需要注意) 加性:加减法(同样特殊数字注意) 关系运算符执行的是比较运算.每个关系运算符都返回一个布尔值. 常规比较:数字与数字,字符串与字符串(按字符代码数值比较) 数字和字符串比较:先将字符串转为数字再比较 ECMAScript 提供了两套等性运算符:等号和非等号用于处理原始值,全等号和非全等号用于处理对象. 等号和非等号 在 ECMAScript 中,等号由双等号(==)表示,当且仅当两个运算数相等时,它