运算符(自增、逗号、赋值)优先级与求值顺序

为什么写这篇文章呢?刚开始做这道题的时候,没有考虑好逗号运算符和赋值运算符的结合性

选项中是关于逗号运算符与自增运算符组成的混合表达式,请运用运算符优先级及求值顺序相关知识,选择合适的选项填在(1)处,使得程序的输出结果为 2,3,1。

#include 

int main(int argc, char** argv)
{
    int x, y, z;
    x = y = 1;
    (_____1_____)
    printf("%d,%d,%d\n", x, y, z);
}

小知识:C语言运算符优先级与结合性

表格从上到下,优先级逐步递减。

类别 运算符 结合性
后缀运算符(Postfix) () [] -> . ++ - - 从左到右
一目运算符(Unary) + - ! ~ ++ - - (type)* & sizeof 从右到左
乘性运算符(Multiplicative) * / % 从左到右
加性运算符(Additive) + - 从左到右
移位运算符(Shift) << >> 从左到右
关系运算符(Relational) < <= > >= 从左到右
等性运算符(Equality) == != 从左到右
位与运算符(Bitwise AND) & 从左到右
位异或运算符(Bitwise XOR) ^ 从左到右
位或运算符(Bitwise OR) 从左到右
逻辑与运算符(Logical AND) && 从左到右
逻辑或运算符(Logical OR) 丨丨 从左到右
条件运算符(Conditional) ?: 从右到左
赋值运算符(Assignment) =   +=   -=   *=   /=   %=   >>=   <<=   &=   ^=   丨= 从右到左
逗号运算符(Comma) , 从左到右

请在以下选项中选择:

  1. (z = (x++, ++y)), y++;
  2. z = (x++, ++y), y++;
  3. z = (x++, ++y, y++);
  4. z = x++, ++y, y++;

这里的答案是第四个选项

#include 

int main()
{
   int x, y, z;
    x = y = 1;
    //(z = (x++, ++y)), y++;// 2 3 2
	//z = (x++, ++y), y++;// 2 3 2
	//z = (x++, ++y, y++);// 2 3 2
	z = x++, ++y, y++;// 2 3 1
    printf("%d,%d,%d\n", x, y, z);
   
   return 0;
}

你可能感兴趣的:(C语言,c语言,算法)