tyf1218405122 发表于 2022-4-8 19:55:13

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

#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?

wp231957 发表于 2022-4-8 20:05:08

后加加不就是不变吗

tyf1218405122 发表于 2022-4-8 20:06:44

wp231957 发表于 2022-4-8 20:05
后加加不就是不变吗

那x也是后--,但x为0啊

tyf1218405122 发表于 2022-4-8 20:08:44

wp231957 发表于 2022-4-8 20:05
后加加不就是不变吗

前面的的y+x;是0+0;
y++先引用后自增,那在前面的y为啥不是1啊?

wp231957 发表于 2022-4-8 20:26:18

本帖最后由 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

tyf1218405122 发表于 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呢?

wp231957 发表于 2022-4-8 20:53:02

tyf1218405122 发表于 2022-4-8 20:46
s=(x-->(y+x)?10:12.5>y++?'A':'Z');
这个三元运算符是结合性右到左;
那就是先判断12.5>y++?'A':'Z ...

所以说,这就是一个无实际意义的代码
在同一个语句中多次出现前置自增自减后置自增自减的,都是无意义的东西,各种编译器处理办法也不尽相同

tyf1218405122 发表于 2022-4-8 20:55:25

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

这是我做题时候做到的 ,答案写的是0+0;
编译器写的也是0+0;
我不知道以后遇到这样的问题 我该怎么解决呢

wp231957 发表于 2022-4-8 21:03:21

tyf1218405122 发表于 2022-4-8 20:46
s=(x-->(y+x)?10:12.5>y++?'A':'Z');
这个三元运算符是结合性右到左;
那就是先判断12.5>y++?'A':'Z ...

我刚刚搜一下,三元嵌套运算方向是自左至右

wp231957 发表于 2022-4-8 21:08:11

tyf1218405122 发表于 2022-4-8 20:46
s=(x-->(y+x)?10:12.5>y++?'A':'Z');
这个三元运算符是结合性右到左;
那就是先判断12.5>y++?'A':'Z ...

因为前面的三元遭遇真值,所以后面的三元没有机会执行,直接略过
页: [1]
查看完整版本: 三元运算符以及自增自减问题。