初学C++,求高手来帮我分析以下这道题?!!!

来源:百度知道 编辑:UC知道 时间:2024/05/26 04:21:34
#include<iostream>
void main()
{
int a(5),b(8),c;
c=a>b?2*a:a<b?a+b:a-b
cout<<a<<','<<b<<','<<c<<endl;
double d(1.5);
cout<<(a<b?a:b)<<endl;
cout<<sizeof(a<b?a:b)<<endl;
}
运行后,输出为
5 8 13
5
8
想不明白,C的输出值为什么会是13呢?那些运算符是怎么样运算的啊???
2楼的厉害啊,那个真的是 d 啊,我开始打错了,打成了B了

同意一楼回答:
首先把(a>b)(2*a)(a<b?a+b:a-b )看成三个整体 而? ;是一个三目运算符

c=a>b?2*a;a<b?:a<b?a+b:a-b
这叫三目运算表达式
先执行这句a>b? ,如果a是大于b的就执行2*a
否则执行a<b?a+b:a-b 这句,再判断a是否小于b如果是,就执行a+b不是就执行a-b ,然后把结果赋值给c
在这就是C = 5 > 8 ? 2 * 5 : 5 < 8 ? 5 + 8 : 5 - 8所以C为13

cout<<(a<b?a:b)<<endl; ||判断a是否小于b如果是,就返回a,否者返回b,这里返回a
cout<<sizeof(a<b?a:b)<<endl; ||sizeof 可以理解为测量数组的字符长度,(a<b?a:b)判断a是否小于b如果是,就返回a,否者返回b,这里返回a
,所以判断sizeof(a)=5,(楼主你确定你的输出答案是正确的吗,如果不能,那我建议你再运行下)

c=a>b?2*a:a<b?:a<b?a+b:a-b
这叫三目运算符
a>b? 先执行这句,如果a是大于b的就执行2*a
否则执行a<b?这句,再判断a是否小于b如果是就执行a+b不是就执行a-b
在这就是C = 5 > 8 ? 2 * 5 : 5 < 8 ? 5 + 8 : 5 - 8所以C为13

真的是输出
5 8 13
5
8吗?
因该是
5 8 13
5
4吧
除非最后是cout<<sizeof(a<d?a:d)<<endl;不是b是d