c语言中易误理解的逗号表达示

char* rev_str(char *dest,const char *src)
//形参是数组名的拷贝,可以进行自增自减操作,步长为解引用类型
{
if(src==NULL)//入参检查
{
return NULL;
}
char*pHead=dest;
char *pTail=src+strlen(src)‐1;//下标比实际字符少一个
while(*pHead++=*pTail‐‐,pTail>src);
return dest;
}

  以上代码是一个字符串反转模型,其中应用到了逗号表达示:

*pHead++=*pTail‐‐,pTail>src

  这里可以理解为表达示1,表达示2,最终会按照表达示2来进行while的判断条件。

逗号表达示,又称为顺序表达示求值运算符,一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如(a=3*5,a*4),a+5 先计算出a的值等于15,再进行a*4的运算得60(但a值未变,仍为15),再进行a+5得20,即整个表达式的值为20。

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

  ① 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函数的一个参数。

posted @ 2017-11-20 16:10  *平凡*随风舞  阅读(459)  评论(0编辑  收藏  举报