int x,y=1;
x=15;
printf("如果y=1,则说明x不在1-20之间,否则x的值应该是位于1-20之间的,x=%d,y=%d",(y=(x>=1&&x<=20)?x:y),y);
如果条件运算符表达式做为第一个参数的话,那么出现的结果为:x=15,y=1。即没有把x的值赋给y,但如果把y做为第一个参数的话,运算结果就变成了x=15,y=15。只是改变了一下位置,为什么y的值便成了15呢?有些不解,请各位朋友指教。
12 个解决方案
#1
y=(x>=1&&x<=20)?x:y
等价于
if(x>=1 && x <=20 )
{
y = x;
}
else
y = y;
等价于
if(x>=1 && x <=20 )
{
y = x;
}
else
y = y;
#2
好比printf("%d%d",y,++y);这样的问题了。实在没意思。
#3
y=(,你的这个=号,可是赋值啊,好好想想
#4
哪个前哪个后,怎么都一样
#5
这问题真是老有人问,函数参数列表的计算顺序是C语言标准未定义的行为,你的输出结果只表示你用的编译器是那样实现的
#6
printf("如果y=1,则说明x不在1-20之间,否则x的值应该是位于1-20之间的,x=%d,y=%d",(x>=1&&x<=20)?x:y),y);
#7
取决于编译器
#8
顺便问下为啥偶图片发不上来啊?- -
#9
跟编译器有关,不同编译器是不一样的……
#10
没意思,还是好好的写代码。
弄不清优先级就加括号,一条语句不好理解就拆开写,有副作用表达式不要用。
#11
直接赋值给y了啊
#12
呵呵,我只是感到好奇,为什么换了一下顺序,就把前面的y也给影响了呢。我用的是CB,菜鸟一名,大家莫怪。
#1
y=(x>=1&&x<=20)?x:y
等价于
if(x>=1 && x <=20 )
{
y = x;
}
else
y = y;
等价于
if(x>=1 && x <=20 )
{
y = x;
}
else
y = y;
#2
好比printf("%d%d",y,++y);这样的问题了。实在没意思。
#3
y=(,你的这个=号,可是赋值啊,好好想想
#4
哪个前哪个后,怎么都一样
#5
这问题真是老有人问,函数参数列表的计算顺序是C语言标准未定义的行为,你的输出结果只表示你用的编译器是那样实现的
#6
printf("如果y=1,则说明x不在1-20之间,否则x的值应该是位于1-20之间的,x=%d,y=%d",(x>=1&&x<=20)?x:y),y);
#7
取决于编译器
#8
顺便问下为啥偶图片发不上来啊?- -
#9
跟编译器有关,不同编译器是不一样的……
#10
没意思,还是好好的写代码。
弄不清优先级就加括号,一条语句不好理解就拆开写,有副作用表达式不要用。
#11
直接赋值给y了啊
#12
呵呵,我只是感到好奇,为什么换了一下顺序,就把前面的y也给影响了呢。我用的是CB,菜鸟一名,大家莫怪。