哆啦的时光机
该逗号操作将评估左操作数,丢弃的结果,然后计算右边的操作数,这将是这个结果。链接中提到的惯用法是在初始化for循环中使用的变量时,它给出了以下示例:void rev(char *s, size_t len){
char *first;
for ( first = s, s += len - 1; s >= first; --s)
/*^^^^^^^^^^^^^^^^^^^^^^^*/
putchar(*s);}否则,不会有太多伟大的用途逗号操作符,虽然它很容易被滥用来生成代码是难以阅读和维护。从草案C99标准来看,语法如下:expression:
assignment-expression
expression , assignment-expression和第2段说:逗号运算符的左操作数被计算为void表达式; 评估后有一个序列点。然后评估右操作数; 结果有它的类型和价值。 97)如果尝试修改逗号运算符的结果或在下一个序列点之后访问它,则行为未定义。脚注97说:逗号运算符不会产生左值。这意味着您无法分配逗号运算符的结果。重要的是要注意逗号运算符具有最低优先级,因此有些情况下使用()可以产生很大的不同,例如:#include <stdio.h>int main(){
int x, y ;
x = 1, 2 ;
y = (3,4) ;
printf( "%d %d\n", x, y ) ;}将有以下输出:1 4