数组输出杂项

Utk*_*tav 1 c printf

#include <stdio.h>
int main()
{
int a=3, b = 6;
printf(&a["Hi!Hello! %s\n"], &b["Mnnit/Softathalon"]);
printf(&a["WHAT%c%c%c %c%c %c !\n"], 1["this"],
2["beauty"],0["tool"],0["is"],3["sensitive"],4["CCCCCC"]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

你好!Softathalon

那是C!

为什么这是输出?任何人都可以解释其中的不同格式说明符吗?

Ker*_* SB 6

对于任何数组T arr[N],表达式arr[i]都相当于*(arr + i).

因为在后一个表达式中添加是可交换的,所以你也可以将其写为*(i + arr),因此i[arr].

特别是,arr[3]3[arr]表示同样的事情.

这是"你可以用C做的奇怪有趣的事情"之一,但不言而喻,严肃的代码永远不应该真正使用这样的结构.