C for循环中语句的从左到右求值,用逗号分隔

C for循环中语句的从左到右求值,用逗号分隔,c,for-loop,comma-operator,C,For Loop,Comma Operator,这两种代码相同吗?for循环中的这些语句写在同一行中,用逗号分隔。是否从左到右对其进行评估 我还想问,我可以在for循环中使用尽可能多的语句,并用逗号分隔。比如(i=0,j=0,k=0;…) for(i=0,j=strlen(s)-1;iC逗号运算符计算两个操作数中的每一个,丢弃第一个操作数的结果并返回第二个操作数。对于多个逗号,运算符是左关联的,因此效果是从左到右的计算 因此,您的第二个示例将执行与第一个示例相同的操作。但是,与i=0,j-strlen(s)不同,它的样式很差,因为没有理由使用

这两种代码相同吗?for循环中的这些语句写在同一行中,用逗号分隔。是否从左到右对其进行评估

我还想问,我可以在for循环中使用尽可能多的语句,并用逗号分隔。比如(i=0,j=0,k=0;…)


for(i=0,j=strlen(s)-1;iC逗号运算符计算两个操作数中的每一个,丢弃第一个操作数的结果并返回第二个操作数。对于多个逗号,运算符是左关联的,因此效果是从左到右的计算


因此,您的第二个示例将执行与第一个示例相同的操作。但是,与
i=0,j-strlen(s)不同,它的样式很差,因为没有理由使用逗号运算符-1
for
语句的
正文中,不能使用分号。

运算符从左到右求值,并且在左操作数求值和右操作数求值之间有一个序列点,因此这意味着两个代码是等效的。

后一个逗号分隔赋值字符串可供选择只有混淆。for循环定义(而不是正文)中的用法是合适的。如果
I
j
是无符号类型(例如
size\u t
unsigned int
),并且您将一个零长度字符串
s
传递到此(0-terminator at
s[0]
,你不会喜欢结果的。@Zsolt勋爵,呵呵,不,如果你愿意,我不会用的say@LZ:我喜欢逗号运算符。我认为有时它可以使函数更易于阅读。如果函数中的重要概念不是对多个变量的单独赋值,这会压缩不重要的内容。我认为它是一种有效的语言c程序员应该理解的结构。下一步是什么?因为在花括号之前的缩进和换行而终止?
for(i=0, j= strlen(s)-1; i<j; i++, j--){ 
     c=s[i];
     s[i]=s[j];
     s[j]=c;
}
for(i=0, j= strlen(s)-1; i<j; i++, j--)
      c=s[i],s[i]=s[j],s[j]=c;