#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;
}
输出:
您好! Softathalon
那是C!
为什么这是输出?任何人都可以解释其中的不同格式说明符吗?
答案 0 :(得分:6)
对于任何数组T arr[N]
,表达式arr[i]
等同于*(arr + i)
。
因为在后一个表达式中添加是可交换的,所以您也可以将其写为*(i + arr)
,因此将其写为i[arr]
。
特别是,arr[3]
和3[arr]
表示同样的事情。
这是“你可以在C中做的奇怪有趣的事情”之一,但不应该说严肃的代码永远不应该真正使用这样的结构。