这两个代码是一样的吗?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;
C逗号操作符对两个操作数分别求值,丢弃第一个操作数的结果并返回第二个操作数。如果有多个逗号,操作符是左结合的,因此效果是从左到右求值。
因此,第二个示例将执行与第一个示例相同的操作。然而,这是一个糟糕的风格,因为没有理由使用逗号操作符,不像for
语句体中的i=0, j-strlen(s)-1
,分号不能使用。
,
运算符从左到右求值,且在左操作数和右操作数求值之间有一个序列点,因此表示两个代码是等价的。