C语⾔--逗号运算符及逗号表达式
逗号运算符及表达式
⼀、⽤法概述
C语⾔中","也是⼀种运算符,称为逗号运算符。其功能是将两个或多个表达式连接起来组成⼀个表达式。具体形式如下:
表达式1,表达式2,表达式3,...,表达式n
逗号表达式本⾝并不复杂,逗号表达式遵循⼀下三点特性:
1. 逗号表达式从表达式1开始顺序从左向右执⾏;
2. 其逗号表达式最后的值为最后⼀个表达式的值;
3. 逗号运算的优先级最低,也就说明与其他运算符结合使⽤的时候,在没有括号的情况下逗号运算符最后才执⾏。
举个例⼦:
如:y=(x=a+b),c+d;
本例中,逗号表达式中每个式⼦会从左往右,开始计算。并且y的值等于最后⼀个表⽰式即c+d的值。且逗号表达式的优先级最低,它不会影响到逗号表达式中各个表达式的计算。
我们,将上⾯的例⼦进⾏通⽤性的扩展。将其进⾏扩展为"表达式1,表达式2,表达式3…表达式n",整个逗号表达式的值就是表达式n的值。(总结来说就是最后⼀个表达式的值,且会从左往右依次计算各个表达式)
程序中使⽤逗号表达式,通常是要分别计算逗号表达式内各表达式的值,最后⼀个表⽰式为逗号表⽰式的结果。
注意,并不是在所有出现逗号的地⽅都组成逗号表达式,如在变量的说明中,函数参数表中逗号只是⽤于各变量之间的间隔符。
为了加深理解,我们再看⼏个例⼦
例如:y=(z=8,x=5,y=3);
z赋值为3,x赋值为5,y赋值为3。
z = (x=5,y=6,x+y);
z赋值为11,x赋值为5,y赋值为6;
⼆、常见⽤法
那么逗号表达式有什么作⽤呢?C语⾔为什么要保留它?“存在即合理”,那么它存在⾃然有它存在的道理。
1. 简化代码结构
其中⼀个⽤途就是简化代码的书写,下⾯来看⼀个逗号表达式的应⽤例⼦:
if(IsOk())
{
sOkProc();
return GetOkCode();
}
else
{
sNoProc();
return GetNoCode();
}
return(IsOk())?(sOkProc(),GetOkCode()):(sNoProc(),GetNoCode());
在上⾯,我们将⼀个10⾏左右的代码改写为只有⼀⾏。这就⼤⼤简化了我们代码。
2. for循环中
for循环中是逗号表达式常出现的地⽅,逗号表⽰式可以简化我们的代码。让我们的代码表达更加清晰。
#include<stdio.h>
#include<stdlib.h>
#define  ROW_NUM  (5)
#define  LINE_NUM (5)
int main(int argc,char*argv[])
{
int i =0,j =0;
int Matrix[ROW_NUM][LINE_NUM]={{1,1,1,1,1},\
{2,2,2,2,2},\
{3,3,3,3,3},\
{4,4,4,4,4},\
{5,5,5,5,5},\
};
for(i =0,j =0;(i < ROW_NUM)&&(j < LINE_NUM);i++,j +=2)
{
printf("Matrix[%d][%d] = %d\n",i,j,Matrix[i][j]);
}
return0;
}
3. 弱化⾃增运算符(++)的前后问题
/******************************************
* Fuction: Main
* Descir :弱化++前后问题
*****************************************/
int main(int argc,char*argv[])
{
int i =0;
//1、常规操作
i =0;
while(++i <3)
{
printf(" i = %d\n",i);
}
printf("*****************\n");
i =0;
while(i++<3)
{
printf(" i = %d\n",i);
}
printf("*****************\n");
//2、逗号表达式处理⼀下
i =0;
while( i++,i <3)
{
printf(" i = %d\n",i);
}
printf("*****************\n");
i =0;
while(++i,i <3)
{
printf(" i = %d\n",i);
}
printf("*****************\n");
return0;
}
当使⽤逗号表达式以后,不管++在前还是在后,其都会⾃增加1,然后再进⾏右边表达式的处理,这样就不⽤担⼼是不是多记了⼀次,导致各种问题。
4. 简化宏表达式
#define GET_INDEX(a ,b)( a+= 2,a + b)
/******************************************
c语言中逗号表达式的用法* Fuction: Main
* Descir : 简化宏
*****************************************/
int main(int argc,char*argv[]){
int i =0,Val =0;
int Param1 =0, Param2 =0;
int Matrix[5]={5,5,5,5,5};
printf(" Matrix = %d\n",Matrix[GET_INDEX(Param1,Param2)]);
return0;
}
三、总结
1. 逗号表达式最终还是⼀个表达式,所以它可以直接⽤在⼏乎所有变量可以⽤的地⽅,这是和语句不同的。
2. 所以逗号表达式左边的表达式可以预先进⾏各种处理,其最右边的表达式相当于返回最后的结果,从⽽减少函数的封装和调⽤。
逗号表达式其实就是横向编码的⼀种⽅式,能够让程序员更好的利⽤⼀⾏的空间,使得代码更加紧凑,所以使⽤逗号表达式并没炫技,⽽是增强了代码的灵活度,不过话说回来逗号表达式在C混乱编码⼤赛上的使⽤频度是⾮常之⾼的。所以如果使⽤不当的话,反⽽会造成代码的混乱。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。