费解的条件表达式

栗子冰激凌 2011-10-04 08:40:48
c++ primer plus
里提到一个例子
const char x[2][20]={"Jason","at your service"};
const char *y = "Quillstone";
for (int i=0;i<3;i++)
cout << ((x<2)?!i?x[i]:y:x[1]);

最后输出结果是Jason Quillstone at your service

请问,((x<2)?!i?x[i]:y:x[1])这句怎么理解啊?
...全文
110 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
自由 2011-10-08
  • 打赏
  • 举报
回复
? : 为一组条件运算符,楼主可以看表达式一章中的相关小节
赵4老师 2011-10-08
  • 打赏
  • 举报
回复
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。

不要写连自己也预测不了结果的代码!
qq120848369 2011-10-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 a49688448 的回复:]

引用 1 楼 mingliang1212 的回复:

,((x<2)?!i?x[i]:y:x[1])

很简单,加多个括号就好理解了:


( (x<2) ? (!i ? x[i] : y) :x[1] )

1楼有才 明白了 确实是我抄错了
为什么这个括号加那呢?
是和运算的优先级有关么?能再细说下么?
[/Quote]

。。。
栗子冰激凌 2011-10-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mingliang1212 的回复:]

,((x<2)?!i?x[i]:y:x[1])

很简单,加多个括号就好理解了:


( (x<2) ? (!i ? x[i] : y) :x[1] )
[/Quote]
1楼有才 明白了 确实是我抄错了
为什么这个括号加那呢?
是和运算的优先级有关么?能再细说下么?
chelp 2011-10-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mingliang1212 的回复:]
,((x<2)?!i?x[i]:y:x[1])

很简单,加多个括号就好理解了:


( (x<2) ? (!i ? x[i] : y) :x[1] )
[/Quote]
哥们有才啊,我看了就蒙了
linchao302 2011-10-04
  • 打赏
  • 举报
回复
我在vc6.0试过,根本通不过编译,而是((i<2)?!i?x[i]:y:x[1])!才能通过编译!
noting_gonna 2011-10-04
  • 打赏
  • 举报
回复
楼主确定是((x<2)?!i?x[i]:y:x[1])
而不是((i<2)?!i?x[i]:y:x[1])
iamnobody 2011-10-04
  • 打赏
  • 举报
回复
而且应该是
((i<2)?!i?x[i]:y:x[1])

吧,怎么会x<2呢?应该是i<2吧。
iamnobody 2011-10-04
  • 打赏
  • 举报
回复
,((x<2)?!i?x[i]:y:x[1])

很简单,加多个括号就好理解了:


( (x<2) ? (!i ? x[i] : y) :x[1] )

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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