三目运算符 ? : 有返回值吗?

lucky-lucky 2010-06-25 08:46:06
三目运算符 ? : 有返回值吗?
当我们在用三目运算符的时候 比如:
j < (N - 1) ? (j++,i = 0):0
假如现在j就< (N - 1),那么它就运算j++,i = 0,我想知道在三目运算符运算完了之后是否有返回值?
是真还是假?
...全文
2680 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
figo1688 2010-12-13
  • 打赏
  • 举报
回复
这是个很基础的问题
lucky-lucky 2010-06-25
  • 打赏
  • 举报
回复
这个答案回答的好清晰啊,感觉有洞彻的影子……太好了,我懂了一点点
[Quote=引用 10 楼 yunyun1886358 的回复:]
j < (N - 1) ? (j++,i = 0):0
1、如果j < (N - 1)成立,三目表达式的值为(j++,i = 0);而(j++,i = 0)是逗号表达式,逗号表达式的值是最后一个逗号后面的表达式的值,在这里也就是i = 0;i = 0是一个赋值表达式,他的值等于变量i的值,也就是0;
2、如果j > (N - 1)成立,三目表达式的值为0

结论:所以这个三目表达式的值恒为……
[/Quote]
lucky-lucky 2010-06-25
  • 打赏
  • 举报
回复
上面的解释都与我相差的有点距离,四楼对我有帮助,我是想知道它返回的是逗号运算符前一个还是后一个?
yunyun1886358 2010-06-25
  • 打赏
  • 举报
回复
j < (N - 1) ? (j++,i = 0):0
1、如果j < (N - 1)成立,三目表达式的值为(j++,i = 0);而(j++,i = 0)是逗号表达式,逗号表达式的值是最后一个逗号后面的表达式的值,在这里也就是i = 0;i = 0是一个赋值表达式,他的值等于变量i的值,也就是0;
2、如果j > (N - 1)成立,三目表达式的值为0

结论:所以这个三目表达式的值恒为0
爱吃大南瓜 2010-06-25
  • 打赏
  • 举报
回复
j < (N - 1) ? (j++,i = 0):0
准确说应该是这个三目表达式的值,
如果 j 小于 N - 1 这个三目表达式的值为(j++,i = 0)
否则这个三目表达式的值为0。
(j++,i = 0) 又是个逗号表达式,所以取逗号后面的值为0
lljyx1984 2010-06-25
  • 打赏
  • 举报
回复
好像所有表达式都有返回值的。
xt0601 2010-06-25
  • 打赏
  • 举报
回复
以上已经很明确了!我也说一下吧!

三目运算:

(条件)?(表达式1):(表达式2);

等价于:

(if (条件))== TRUE return (表达式1);
else return (表达式2);
jvs 2010-06-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lthyxy 的回复:]
C/C++ code

#include <iostream>
using namespace std;
int fun()
{ int i = 4;
int j = 10;
return i>j?i:j;
}
int main()
{ int i = fun();
cout << i << endl;
system("pause");
return ……
[/Quote]
问题是如果
return i>j?i:j;
改成
return i>j?i:(i,j);时
结果为10
改成
return i>j?i:(j,i);
结果为4

这是个值得思考的问题,因为函数只能返回一个值

liutengfeigo 2010-06-25
  • 打赏
  • 举报
回复
其实就是代替if else 用的。
huanmie_09 2010-06-25
  • 打赏
  • 举报
回复
可以取运算结果来看看:
int res = (j < (N - 1) ? (j++,i = 0):0);
printf("res=%d\n", res);
j<N-1成立时,执行(j++, i=0),这又是一个逗号表达式. 先执行j++, 然后执行赋值表达式i=0, 并将i作为最终的结果作为整个表达式的计算结果.
  • 打赏
  • 举报
回复
三目运算:
(条件)?(结果1):(结果2)
返回的就是【结果1】或者【结果2】

如果条件成立,就是结果1,否则是结果2
liutengfeigo 2010-06-25
  • 打赏
  • 举报
回复
忘记告诉你结果了 输出10.
发问的时候其实够自己写出来了
liutengfeigo 2010-06-25
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
int fun()
{ int i = 4;
int j = 10;
return i>j?i:j;
}
int main()
{ int i = fun();
cout << i << endl;
system("pause");
return 0;
}

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧