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

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

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

#include <stdio.h>

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 <stdio.h>

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值