3

这两个代码一样吗?for 循环中的这些语句写在同一行中,用逗号分隔。他们会从左到右进行评估吗?

另外我想问一下我可以在for循环中使用尽可能多的语句,用逗号分隔。像 for(i=0, j=0, k=0; .......) 一样吗?

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;
4

2 回答 2

6

C 逗号运算符计算两个操作数中的每一个,丢弃第一个的结果并返回第二个。如果有多个逗号,则运算符是左关联的,因此效果是从左到右的评估。

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

于 2014-06-18T19:36:45.330 回答
3

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

于 2014-06-18T19:41:19.673 回答