算子在C中做什么呢?


当前回答

正如前面的回答所述,它对所有语句求值,但使用最后一个语句作为表达式的值。我个人认为它只在循环表达式中有用:

for (tmp=0, i = MAX; i > 0; i--)

其他回答

表达式:

(expression1,  expression2)

首先求出expression1的值,然后求出expression2的值,然后返回整个表达式的expression2的值。

我看到它唯一有用的地方是当你写一个古怪的循环,你想在一个表达式(可能是init表达式或循环表达式)中做多个事情。喜欢的东西:

bool arraysAreMirrored(int a1[], int a2[], size_t size)
{
  size_t i1, i2;
  for(i1 = 0, i2 = size - 1; i1 < size; i1++, i2--)
  {
    if(a1[i1] != a2[i2])
    {
      return false;
    }
  }

  return true;
}

如果有任何语法错误,或者我混合了任何不是严格c的东西,请原谅,我不是说,操作符是一种很好的形式,但这就是你可以使用它的原因。在上面的例子中,我可能会使用while循环,这样init和loop上的多个表达式会更明显。(我将内联初始化i1和i2,而不是声明然后初始化....等等等等。)

它导致对多个语句求值,但只使用最后一个语句作为结果值(我认为是右值)。

所以…

int f() { return 7; }
int g() { return 8; }

int x = (printf("assigning x"), f(), g() );

应该导致x被设置为8。

我在while循环中见过最常用的:

string s;
while(read_string(s), s.len() > 5)
{
   //do something
}

它会做手术,然后根据副作用做一个测试。另一种方法是这样做:

string s;
read_string(s);
while(s.len() > 5)
{
   //do something
   read_string(s);
}

正如前面的回答所述,它对所有语句求值,但使用最后一个语句作为表达式的值。我个人认为它只在循环表达式中有用:

for (tmp=0, i = MAX; i > 0; i--)