三元运算符以及自增自减问题。
#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
后加加不就是不变吗
那x也是后--,但x为0啊 wp231957 发表于 2022-4-8 20:05
后加加不就是不变吗
前面的的y+x;是0+0;
y++先引用后自增,那在前面的y为啥不是1啊? 本帖最后由 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
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呢? 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 20:53
所以说,这就是一个无实际意义的代码
在同一个语句中多次出现前置自增自减后置自增自减的,都是无意义的 ...
这是我做题时候做到的 ,答案写的是0+0;
编译器写的也是0+0;
我不知道以后遇到这样的问题 我该怎么解决呢 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:46
s=(x-->(y+x)?10:12.5>y++?'A':'Z');
这个三元运算符是结合性右到左;
那就是先判断12.5>y++?'A':'Z ...
因为前面的三元遭遇真值,所以后面的三元没有机会执行,直接略过
页:
[1]