C语言逗号运算符
2016-03-11 09:25
295 查看
一、逗号运算符
在C语言中,逗号“,”的用法有两种:一种是用作分隔符,另一种是用作运算符。
在变量声明语句、函数调用语句等场合,逗号是作为分隔符使用的。
例如:
int a,b,c;
scanf('%f%f%f',&f1,&f2,&f3);
C语言还允许用逗号连接表达式。例如x=5.6,y=2.1,10+x,x+y这里用三个逗号运算符将四个算术表达式连接成一个逗号表达式。
二、逗号表达式
形式:表达式1,表达式2,表达式3,...,表达式n
例:
a=2*6,a-4,a+15;
当逗号作为运算符使用时是一个双目运算符,其运算优先级是所有运算符中最低的。逗号运算符的运算顺序是自左向右的,因此上述赋值语句的求值顺序为:先计算2*6并赋予a(结果是a=12),再计算a-4(只计算,不赋值),最后计算a+15(只计算,不赋值),最终以27作为整个逗号表达式的值。请注意,后面两个表达式的值仅作了计算,而并没有赋给a,所以a的值仍然为12。
有时候使用逗号表达式的目的仅仅是为了得到各个表达式的值,而并非要得到真个逗号表达式的值。
例:
t=a,a=b,b=t;
此逗号表达式的目的是实现变量a,b值互换,而不是使用整个表达式的值。
例:
由于逗号运算符的优先级最低,因此x=5+5,10+10与x=(5+5,10+10)的作用不同,前者是x被赋值为10,而整个逗号表达式的值为20;后者由于增加了一对括号 ,使10+10作为整个表达式的值并赋予变量x,因此x的值为20。
例:
逗号表达式(a=3*5,a*4),a+15 的运算顺序为:将3*5的结果15赋给变量a,再计算括号内的第二个表达式a*4的值,结果为60,该整数60虽然作为括号所构成的表达式的值,但是a的值仍然是15,因此最后计算a+15时,结果为30。
例:
int j=5;
a=(a=j+1,a+2,a+3);
该赋值语句的执行顺序为:先对a变量赋值6,再计算a+2得8,再计算a+3得9,最后将9作为整个逗号表达式的值付给变量a,使a重新赋值为9。如果将一对括号去掉,a的值为6。
例:
int x ,y;
y=(x=1,++x,x+2);
该赋值语句的执行顺序为:x被赋值为1,x自增1得2,再计算x+2得4,4作为整个逗号表达式的值付给变量y,因此y被赋值为4
其实,逗号表达式无非是把若干个表达式“串联”起来。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值,逗号表达式最常用于循环语句(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使用灵活,适应性强
在C语言中,逗号“,”的用法有两种:一种是用作分隔符,另一种是用作运算符。
在变量声明语句、函数调用语句等场合,逗号是作为分隔符使用的。
例如:
int a,b,c;
scanf('%f%f%f',&f1,&f2,&f3);
C语言还允许用逗号连接表达式。例如x=5.6,y=2.1,10+x,x+y这里用三个逗号运算符将四个算术表达式连接成一个逗号表达式。
二、逗号表达式
形式:表达式1,表达式2,表达式3,...,表达式n
例:
a=2*6,a-4,a+15;
当逗号作为运算符使用时是一个双目运算符,其运算优先级是所有运算符中最低的。逗号运算符的运算顺序是自左向右的,因此上述赋值语句的求值顺序为:先计算2*6并赋予a(结果是a=12),再计算a-4(只计算,不赋值),最后计算a+15(只计算,不赋值),最终以27作为整个逗号表达式的值。请注意,后面两个表达式的值仅作了计算,而并没有赋给a,所以a的值仍然为12。
有时候使用逗号表达式的目的仅仅是为了得到各个表达式的值,而并非要得到真个逗号表达式的值。
例:
t=a,a=b,b=t;
此逗号表达式的目的是实现变量a,b值互换,而不是使用整个表达式的值。
例:
由于逗号运算符的优先级最低,因此x=5+5,10+10与x=(5+5,10+10)的作用不同,前者是x被赋值为10,而整个逗号表达式的值为20;后者由于增加了一对括号 ,使10+10作为整个表达式的值并赋予变量x,因此x的值为20。
例:
逗号表达式(a=3*5,a*4),a+15 的运算顺序为:将3*5的结果15赋给变量a,再计算括号内的第二个表达式a*4的值,结果为60,该整数60虽然作为括号所构成的表达式的值,但是a的值仍然是15,因此最后计算a+15时,结果为30。
例:
int j=5;
a=(a=j+1,a+2,a+3);
该赋值语句的执行顺序为:先对a变量赋值6,再计算a+2得8,再计算a+3得9,最后将9作为整个逗号表达式的值付给变量a,使a重新赋值为9。如果将一对括号去掉,a的值为6。
例:
int x ,y;
y=(x=1,++x,x+2);
该赋值语句的执行顺序为:x被赋值为1,x自增1得2,再计算x+2得4,4作为整个逗号表达式的值付给变量y,因此y被赋值为4
其实,逗号表达式无非是把若干个表达式“串联”起来。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值,逗号表达式最常用于循环语句(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使用灵活,适应性强
相关文章推荐
- C语言运算符优先级
- C语言,指针与内存分配
- C++实现 贪心算法-区间覆盖问题
- ACM气球膨胀问题C++实现
- C++11带来的move语义
- c语言函数指针的理解与使用
- 彻底搞定C语言指针详解
- C++ 关键词的详细解释(—)
- CFILE C++获取当前路径 CSting 拼接
- c语言将十进制数转换为16进制的函数
- VC++常规错误之21:Debug Assertion Failed!在winocc.cpp第307或329行错误 断言错误,如图所示
- 【C++】获得本机所有网卡的IP和MAC地址信息
- list C++操作一览
- C++中将string类型转换为int, float, double类型
- C++多态
- [C++] 回溯法生成数独
- Exceptional C++, 实现一个不区分大小写的字符串比较类
- C++类的成员函数对应的链接器符号的解析
- C++ Exceptional Item 20 Class Mechanics
- C++ 字符数组的拷贝、拼接、逆序输出 函数的实现