我在SNS相册中看到了这两个陈述,标题是“我见过的最优雅的输出方式”等等。
以下是两个陈述:
printf("%d%c", a, " \n"[i==n]);
puts("YES\0No"+condition * 4);
我不知道他们在做什么以及他们是如何工作的。有人会向我解释一下吗?谢谢。
答案 0 :(得分:6)
" \n"[i==n]
获取表达式i==n
,其值为0或1,并将其用作数组" \n"
的索引,获取' '
或{{ 1}}。
'\n'
获取数组"YES\0N0"+condition * 4
,当在大多数表达式(包括此表达式)中使用时,它'衰减'到指向其第一个元素的指针,并将"YES\0N0"
添加到此指针。如果condition * 4
为1,则会在condition
开头生成指向'N'
的指针。
答案 1 :(得分:1)
如果i != n
,则会在%d
之后打印一个空格,否则会换行。
// printf("%d%c", a, " \n"[i==n]);
// when i != n
printf("%d%c", a, " \n"[0]); // or
printf("%d%c", a, ' '); // or
printf("%d ", a); // or
// when i == n
printf("%d%c", a, " \n"[1]); // or
printf("%d%c", a, '\n'); // or
printf("%d\n", a); // or
打印数字分隔符的有趣方法,可能在for
循环中使用。
类似于puts("YES\0N0"+condition * 4);
条件为0时,打印
puts("YES");`
当条件为1时,它会打印
puts("N0");` // Thanks @ Jonathan Leffler