鱼C论坛

 找回密码
 立即注册
查看: 1550|回复: 9

三元运算符以及自增自减问题。

[复制链接]
发表于 2022-4-8 19:55:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{
        int x=1,y=0,s;
        s=(x-->(y+x)?10:12.5>y++?'A':'Z');
        printf("%d\n",y);
        printf("%d",x);
        putchar('\n');
        printf("%d",s);
       
}


为什么 y++后y的值还是为0,没有变成1?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-8 20:05:08 From FishC Mobile | 显示全部楼层

回帖奖励 +10 鱼币

后加加不就是不变吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-8 20:06:44 | 显示全部楼层
wp231957 发表于 2022-4-8 20:05
后加加不就是不变吗

那x也是后--,但x为0啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-8 20:08:44 | 显示全部楼层
wp231957 发表于 2022-4-8 20:05
后加加不就是不变吗

前面的的y+x;是0+0;
y++先引用后自增,那在前面的y为啥不是1啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-8 20:26:18 From FishC Mobile | 显示全部楼层
本帖最后由 wp231957 于 2022-4-8 20:27 编辑
tyf1218405122 发表于 2022-4-8 20:08
前面的的y+x;是0+0;
y++先引用后自增,那在前面的y为啥不是1啊?


对啊,x=1   x--=1   x=0
           y=0    y++=0   y=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-8 20:46:27 | 显示全部楼层
wp231957 发表于 2022-4-8 20:26
对啊,x=1   x--=1   x=0
           y=0    y++=0   y=1

s=(x-->(y+x)?10:12.5>y++?'A':'Z');
这个三元运算符是结合性右到左;
那就是先判断  12.5>y++?'A':'Z'     y++为先引用0,然后y=1,返回'A';
然后在判断  x-->(y+x)?10:'A'    x--先引用1;然后--为0;后面y+x应该是1+0=1啊;
为什么是0+0呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-8 20:53:02 From FishC Mobile | 显示全部楼层
tyf1218405122 发表于 2022-4-8 20:46
s=(x-->(y+x)?10:12.5>y++?'A':'Z');
这个三元运算符是结合性右到左;
那就是先判断  12.5>y++?'A':'Z ...

所以说,这就是一个无实际意义的代码
在同一个语句中多次出现前置自增自减后置自增自减的,都是无意义的东西,各种编译器处理办法也不尽相同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-8 20:55:25 | 显示全部楼层
wp231957 发表于 2022-4-8 20:53
所以说,这就是一个无实际意义的代码
在同一个语句中多次出现前置自增自减后置自增自减的,都是无意义的 ...

这是我做题时候做到的 ,答案写的是0+0;
编译器写的也是0+0;
我不知道以后遇到这样的问题 我该怎么解决呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-8 21:03:21 From FishC Mobile | 显示全部楼层
tyf1218405122 发表于 2022-4-8 20:46
s=(x-->(y+x)?10:12.5>y++?'A':'Z');
这个三元运算符是结合性右到左;
那就是先判断  12.5>y++?'A':'Z ...

我刚刚搜一下,三元嵌套运算方向是自左至右
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-8 21:08:11 From FishC Mobile | 显示全部楼层
tyf1218405122 发表于 2022-4-8 20:46
s=(x-->(y+x)?10:12.5>y++?'A':'Z');
这个三元运算符是结合性右到左;
那就是先判断  12.5>y++?'A':'Z ...

因为前面的三元遭遇真值,所以后面的三元没有机会执行,直接略过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 06:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表