奇怪的printf和put语句解释

lai*_*e9m 3 c printf puts

我在一张SNS相册中看到了这两个陈述,标题是"我见过的最优雅的输出方式"等等.

以下是两个陈述:

printf("%d%c", a, " \n"[i==n]);
puts("YES\0No"+condition * 4);
Run Code Online (Sandbox Code Playgroud)

我不知道他们在做什么以及他们是如何工作的.有人会向我解释一下吗?谢谢.

R..*_*R.. 6

" \n"[i==n]获取表达式i==n,该表达式的计算结果为0或1,并将其用作数组的索引" \n",获取' '或者'\n'.

"YES\0N0"+condition * 4获取数组"YES\0N0",当在大多数表达式(包括此表达式)中使用时,该数组"衰减"到指向其第一个元素的指针,并添加condition * 4到此指针.如果condition为1,则产生指向'N'开头的指针"N0".